ksaitoの日記

日々試したことの覚え書き

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
$