Enviar pesquisa
Carregar
GNU make 4.0に何かいる
•
3 gostaram
•
2,345 visualizações
E
emasaka
Seguir
Tecnologia
Diversão e humor
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 15
Baixar agora
Baixar para ler offline
Recomendados
openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門
Fuminobu Takeyama
サーバーでもデスクトップでもOK! YaSTを使ってLinuxをらくらく設定
サーバーでもデスクトップでもOK! YaSTを使ってLinuxをらくらく設定
Fuminobu Takeyama
Homebrewによるソフトウェアの実装 (3)
Homebrewによるソフトウェアの実装 (3)
Yoshihiro Mizoguchi
Homebrewによるソフトウェアの実装(1)
Homebrewによるソフトウェアの実装(1)
Yoshihiro Mizoguchi
Homebrewによるソフトウェアの実装 (2)
Homebrewによるソフトウェアの実装 (2)
Yoshihiro Mizoguchi
LTS & ローリングリリース! ― ランキング4位のLinuxディストリビューション openSUSE を Azure で使ってみる
LTS & ローリングリリース! ― ランキング4位のLinuxディストリビューション openSUSE を Azure で使ってみる
Fuminobu Takeyama
覚えておきたい! zypper コマンドの使い方
覚えておきたい! zypper コマンドの使い方
Fuminobu Takeyama
OSSのオーケストレーションツールCloudConductor入門 ~インストールでのハマりどころ~
OSSのオーケストレーションツールCloudConductor入門 ~インストールでのハマりどころ~
Yoshimi Tominaga
Mais conteúdo relacionado
Mais de emasaka
ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議
emasaka
濁点の話
濁点の話
emasaka
GoBoLinuxを試した
GoBoLinuxを試した
emasaka
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマーク
emasaka
みおぽん for CLI
みおぽん for CLI
emasaka
メタメタプログラミングRuby
メタメタプログラミングRuby
emasaka
長いの
長いの
emasaka
)の品格
)の品格
emasaka
人力
人力
emasaka
エコなWebサーバー
エコなWebサーバー
emasaka
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
emasaka
Bash on Railsの逆襲
Bash on Railsの逆襲
emasaka
Mais de emasaka
(12)
ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議
濁点の話
濁点の話
GoBoLinuxを試した
GoBoLinuxを試した
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマーク
みおぽん for CLI
みおぽん for CLI
メタメタプログラミングRuby
メタメタプログラミングRuby
長いの
長いの
)の品格
)の品格
人力
人力
エコなWebサーバー
エコなWebサーバー
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
Bash on Railsの逆襲
Bash on Railsの逆襲
Último
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
ssuser370dd7
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
ssuser539845
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
arts yokohama
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
Sadao Tokuyama
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
Matsushita Laboratory
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
Ayachika Kitazaki
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
Shumpei Kishi
2024 03 CTEA
2024 03 CTEA
arts yokohama
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院)
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
arts yokohama
2024 04 minnanoito
2024 04 minnanoito
arts yokohama
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
Tetsuya Nihonmatsu
Último
(12)
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
2024 03 CTEA
2024 03 CTEA
What is the world where you can make your own semiconductors?
What is the world where you can make your own semiconductors?
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 04 minnanoito
2024 04 minnanoito
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
GNU make 4.0に何かいる
1.
GNU make 4.0に 何かいる @emasaka
2.
GNU make 4.0登場 ● 10/8リリース ● 主な新機能 – --output-sync:並列実行で出力が混ざるのを防ぐ – --trace:実行するコマンドを出力 – Guileを組み込める
3.
Guile? ● GNUのSchemeインタープリタ ● アプリ組み込みが主な目的 – TclとかLuaとかmrubyとかと同類
4.
ブログにも書いた
5.
やってみる1 ● Guileをインストールしておく – ● $ sudo apt-get
install guile-2.0 guile-2.0-devs 「guile-2.0」パッケージはなくてもいいと思うけ ど、Schemeコードの動作確認のため
6.
やってみる2 ● GNU make 4.0のソースをもってきて展開 ● ./configure – このときにGuile(ライブラリ)が入っていると、makeの Guileサポートが有効になる ● – おそらくLinuxディストロでは無効になるのでは? --with-guile=noで明示的に無効に
7.
やってみる3 ● ● $ make $ ldd
./make | grep guile libguile-2.0.so.22 => /usr/lib/libguile-2.0.so.22 (0x00007f6482291000)
8.
確認 ● .FEATURES変数に“guile”が入っていればOK $ cat features.mk all: @echo $(.FEATURES) $ ./make f features.mk targetspecific orderonly secondexpansion elseif shorteststem undefine oneshell archives jobserver outputsync checksymlink guile load
9.
使いかた ● $(guile 〜)関数 ● ようは$(shell 〜)関数でシェルを呼ぶのといっしょ
10.
例1:とりあえず出力 all: echo $(guile '("Hello, World!"))
11.
例2:なんかSchemeっぽいの sexp = (map (lambda (x) (+ x 3)) (iota 10)) all: @echo $(guile $(sexp))
12.
例3:FizzBuzz(shell版) http://d.hatena.ne.jp/eel3/20110924/1316791928 より all: $(shell seq 1 1 100) $(shell seq 3 3 100): @echo Fizz $(shell seq 5 5 100): @echo Buzz $(shell seq 15 15 100): @echo FizzBuzz .DEFAULT: @echo $@
13.
例3:FizzBuzz(guile版) all: $(guile (usemodules (srfi srfi1))) $ (guile (iota 100 1 1)) $(guile (iota 100 3 3)): @echo Fizz $(guile (iota 100 5 5)): @echo Buzz $(guile (iota 100 15 15)): @echo FizzBuzz .DEFAULT: @echo $@
14.
例3:FizzBuzz(実行時間) $ time ./make f fbscm.mk >& /dev/null ./make f fbscm.mk >&/dev/null 0.10s user 0.06s system 47% cpu 0.337 total $ time ./make f fbsh.mk >& /dev/null ./make f fbsh.mk >&/dev/null 0.05s user 0.04s system 35% cpu 0.258 total shell版のほうが速い!
15.
例4:SchemeでmakeのDSL define dsl (usemodules (srfi srfi1)) (define targets '()) (define (showtargets) (stringjoin (reverse targets) "n") ) (definemacro (push! place item) `(set! ,place (cons ,item ,place)) ) (define (mklist>str lst) (stringjoin (map symbol>string lst)) ) (definemacro (deftarget tgt dep . cmds) (push! targets (format #f "~a:~a~a" tgt (mklist>str dep) (fold (lambda (x r) (stringappend r "nt" (mklist>str x))) "" cmds )) )) (deftarget all (foo) (@./foo)) (deftarget foo (foo.c) (cc foo.c o foo) ) endef dummy := $(guile $(dsl)) $(guile (gmkeval (showtargets)))
Baixar agora