.PHONY: b
c: a
@touch c
@echo "Changed"
a: b
b:
@date +%s > a
サンプルのmakeファイルでmakeを実行すると、最初に実行されたときに「Changed」が出力されます。ただし、「変更済み」は、3回目、5回目などの実行時にのみ出力されます。これは、makeがターゲット「b」のレシピを実行するとaが更新されることを認識していないように見えるためです。
ターゲットとして「a」を使用するルールを空のレシピに変更すると、makeが実行されるたびに「Changed」が出力されます(予想どおり、偽のターゲットは常に「古い」と見なされます)。例えば
a: b ;
Makeは、PHONYターゲットの暗黙的なルール検索をスキップする必要がありますが、「a」はPHONYではありません。「a」の暗黙のルールが見つからない場合、「a」がそのPHONY依存関係「b」によって変更された可能性があると見なさないようにするのは正しいですか?