GNU make の暗黙ルール/型ルールの使用例

やっぱ、GNU makeはすげー。やばすぎ。

$ cat Makefile
%.tab: %.csv
        cat $< | perl -pwe 's/,/\t/g'  > $@
 
from = $(wildcard *.csv)
into = $(patsubst %.csv,%.tab,$(from))
 
target: $(into)
$ ls
Makefile  bar.csv  foo.csv
$ make
cat bar.csv | perl -pwe 's/,/\t/g'  > bar.tab
cat foo.csv | perl -pwe 's/,/\t/g'  > foo.tab
$ ls
Makefile  bar.csv  bar.tab  foo.csv  foo.tab

こんなことができちまう。すごすぎ。ミソは、

  • 各ファイル毎に、ルールを書かなくてもよい(暗黙ルール)
  • 該当するsuffixを持つファイルに対して、自身でルールを記述できる(型ルール)

ここにinfoの翻訳があって、参考になる。

http://www.ecoop.net/coop/translated/GNUMake3.77/

(追記)
perlのオプションを変更しました(-nweを-pweに)。あまり-pを使う習慣がなかったので、これを機会に乗り換えてみるテスト(ちなみにcatは、あえて入れてあります。変数'$<'が、あまりにも見づらいので)。

http://itoshi.tv/d/?date=20041031#p02

より。

(更に修正)
ワンライナーなitoshi氏に指摘いただいたmake以下を修正。