make はタスクランナーではないと言われても、make [なんちゃら] 一つで定形処理が実行できるのは便利なわけですよ。プロジェクトに Makefile があるだけで make コマンドで何かが簡単に実行できるんだと伝えられるわけですよ。でも Makefile はタスクランナーとしては書きづらいからシェルスクリプトを埋め込むわけですよ。そうすると Makefile の文法とシェルスクリプトの文法が混ざって読みづらくなるわけですよ。だから結局 Makefile から外部のシェルスクリプトを呼び出すことになるわけですよ。
それなら、もういっそのこと Makefile の中身をシェルスクリプト100%で書けばよくね?と思ったのでやってみました。以下のコードはシェルスクリプトですが Makefile としても解釈することができます。
Makefile
#!/bin/sh
: <<-'HERE'
.PHONY: build test
build:
@sh Makefile $@
test:
@sh Makefile $@
:
HERE
build() {
echo "building..."
}
test() {
echo "testing..."
}
"$@"
- Makefile なのでインデントはタブです。
-
<<-
と書けばヒアドキュメントの終わりをタブでインデントすることが出来ます。 - make の補完もたぶんちゃんと動きます。
- Makefile に実行権限をつけて make コマンドなしに実行することができます。
- 通常の Makefile のコードも混ぜられます。
- 全ての文法が正しく使えるかはわかりません。
ネタというわりに使える気がしてならない。