shell

makeの暗黙のルールに翻弄される

Makefileに記述した覚えのない処理が追加されてしまい、しばらく悩みました。
abcというターゲットをビルドすると、下記の処理が末尾で実行されます。

cat abc.sh >abc
chmod a+x abc

いろいろ調べた結果、makeの暗黙のルールで実行されるコマンドということが分りました。
暗黙のルールは、make -pで確認することができます。
今回、はまったのは、下記の暗黙のルールでした。

%: %.sh
#  実行するコマンド (ビルトイン):
cat $< >$@
chmod a+x $@

たまたま、同じディレクトリにabc.shというファイルがあったため、暗黙のルールに従ってコマンドが実行されたようです。

ちなみに下記のような手順で現象を再現してみました。

$ cat Makefile
abc: abc-global abc-local
abc-global:
@echo global
abc-local:
@echo local
$ make abc
global
local
$ make -n abc
echo global
echo local
$ touch abc.sh
$ make -n abc
echo global
echo local
cat abc.sh >abc
chmod a+x abc
$ 
タイトルとURLをコピーしました