SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
GNU make 4.0に
何かいる
@emasaka
GNU make 4.0登場
●

10/8リリース

●

主な新機能
–

--output-sync:並列実行で出力が混ざるのを防ぐ

–

--trace:実行するコマンドを出力

–

Guileを組み込める
Guile?
●

GNUのSchemeインタープリタ

●

アプリ組み込みが主な目的
–

TclとかLuaとかmrubyとかと同類
ブログにも書いた
やってみる1
●

Guileをインストールしておく
–

●

$ sudo apt-get install guile-2.0 guile-2.0-devs

「guile-2.0」パッケージはなくてもいいと思うけ
ど、Schemeコードの動作確認のため
やってみる2
●

GNU make 4.0のソースをもってきて展開

●

./configure
–

このときにGuile(ライブラリ)が入っていると、makeの
Guileサポートが有効になる
●

–

おそらくLinuxディストロでは無効になるのでは?

--with-guile=noで明示的に無効に
やってみる3
●
●

$ make
$ ldd ./make | grep guile
libguile-2.0.so.22 => /usr/lib/libguile-2.0.so.22
(0x00007f6482291000)
確認
●

.FEATURES変数に“guile”が入っていればOK

$ cat features.mk
all:
        @echo $(.FEATURES)
$ ./make ­f features.mk
target­specific order­only second­expansion else­if 
shortest­stem undefine oneshell archives jobserver 
output­sync check­symlink guile load
使いかた
●

$(guile 〜)関数

●

ようは$(shell 〜)関数でシェルを呼ぶのといっしょ
例1:とりあえず出力
all:
echo $(guile '("Hello, World!"))
例2:なんかSchemeっぽいの
sexp = (map (lambda (x) (+ x 3)) (iota 10))
all:
@echo $(guile $(sexp))
例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 $@
例3:FizzBuzz(guile版)
all: $(guile (use­modules (srfi srfi­1))) $
(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 $@
例3:FizzBuzz(実行時間)
$ time ./make ­f fb­scm.mk >& /dev/null
./make ­f fb­scm.mk >&/dev/null  0.10s user 
0.06s system 47% cpu 0.337 total
$ time ./make ­f fb­sh.mk >& /dev/null
./make ­f fb­sh.mk >&/dev/null  0.05s user 
0.04s system 35% cpu 0.258 total

shell版のほうが速い!
例4:SchemeでmakeのDSL
define dsl
(use­modules (srfi srfi­1))
(define targets '())
(define (showtargets)
  (string­join (reverse targets) "n") )
(define­macro (push! place item)
  `(set! ,place (cons ,item ,place)) )
(define (mklist­>str lst)
  (string­join (map symbol­>string lst)) )
(define­macro (deftarget tgt dep . cmds)
  (push! targets
 (format #f "~a:~a~a"
 tgt (mklist­>str dep)
 (fold (lambda (x r)
 (string­append r "nt" (mklist­>str x))) "" cmds )) ))
(deftarget all (foo)
  (@./foo))
(deftarget foo (foo.c)
  (cc foo.c ­o foo) )
endef
dummy := $(guile $(dsl))
$(guile (gmk­eval (showtargets)))

Mais conteúdo relacionado

Mais de emasaka

ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議emasaka
 
濁点の話
濁点の話濁点の話
濁点の話emasaka
 
GoBoLinuxを試した
GoBoLinuxを試したGoBoLinuxを試した
GoBoLinuxを試したemasaka
 
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマークさくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマークemasaka
 
みおぽん for CLI
みおぽん for CLIみおぽん for CLI
みおぽん for CLIemasaka
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRubyemasaka
 
長いの
長いの長いの
長いのemasaka
 
)の品格
)の品格)の品格
)の品格emasaka
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバーemasaka
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発emasaka
 
Bash on Railsの逆襲
Bash on Railsの逆襲Bash on Railsの逆襲
Bash on Railsの逆襲emasaka
 

Mais de emasaka (12)

ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議
 
濁点の話
濁点の話濁点の話
濁点の話
 
GoBoLinuxを試した
GoBoLinuxを試したGoBoLinuxを試した
GoBoLinuxを試した
 
さくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマークさくらのクラウドでh2oのベンチマーク
さくらのクラウドでh2oのベンチマーク
 
みおぽん for CLI
みおぽん for CLIみおぽん for CLI
みおぽん for CLI
 
メタメタプログラミングRuby
メタメタプログラミングRubyメタメタプログラミングRuby
メタメタプログラミングRuby
 
長いの
長いの長いの
長いの
 
)の品格
)の品格)の品格
)の品格
 
人力
人力人力
人力
 
エコなWebサーバー
エコなWebサーバーエコなWebサーバー
エコなWebサーバー
 
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
ゲットーの斜め上をゆくWebアプリケーションフレームワークの開発
 
Bash on Railsの逆襲
Bash on Railsの逆襲Bash on Railsの逆襲
Bash on Railsの逆襲
 

Último

情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法ssuser370dd7
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)ssuser539845
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor arts yokohama
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦Sadao Tokuyama
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfMatsushita Laboratory
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdfAyachika Kitazaki
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見Shumpei Kishi
 
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~arts yokohama
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」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技術によって実現するための課題と解決方法情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
情報処理学会86回全国大会_Generic OAMをDeep Learning技術によって実現するための課題と解決方法
 
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
IFIP IP3での資格制度を対象とする国際認定(IPSJ86全国大会シンポジウム)
 
2024 01 Virtual_Counselor
2024 01 Virtual_Counselor 2024 01 Virtual_Counselor
2024 01 Virtual_Counselor
 
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
ARスタートアップOnePlanetの Apple Vision Proへの情熱と挑戦
 
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdfTaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
TaketoFujikawa_台本中の動作表現に基づくアニメーション原画システムの提案_SIGEC71.pdf
 
20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf20240326_IoTLT_vol109_kitazaki_v1___.pdf
20240326_IoTLT_vol109_kitazaki_v1___.pdf
 
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
持続可能なDrupal Meetupのコツ - Drupal Meetup Tokyoの知見
 
2024 03 CTEA
2024 03 CTEA2024 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?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 02 Nihon-Tanken ~Towards a More Inclusive Japan~
2024 02 Nihon-Tanken ~Towards a More Inclusive Japan~
 
2024 04 minnanoito
2024 04 minnanoito2024 04 minnanoito
2024 04 minnanoito
 
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
「今からでも間に合う」GPTsによる 活用LT会 - 人とAIが協調するHumani-in-the-Loopへ
 

GNU make 4.0に何かいる