Makefile で特定のファイルを削除しないようにする

Makefile プログラミング

Makefile で更新日を残すために作成したファイルが最後に自動で削除されてしまったので、削除されないようにしてみました。


Makefile で、次回実行時に更新が必要かの指標にするファイルを touch で作成したのですけど、それが make 実行終了時に自動的に削除されてしまいました。

どうやら make のシステムでは、最終的に生成しようとしているファイル以外は『中間ファイル』とみなして、最後に削除する対象になるみたいです。

状況

Makefile のことはよく分からないので、正しい書き方か分からないのですけど、たとえば次のように *.podspec から %.lastpush を生成するルールがあったとします。

%.podspec :
	@make $@.lastpush
	
%.lastpush : %.podspec
	pod repo push $(REPO) $<
	@touch $@

このとき make PODNAME.podspec みたいに実行すると、最後に実行した日付を記録するために touch で作成したファイルが、最後にきれいに消されてしまいました。

中間ファイルを削除させない

このファイルを削除させないようにするには、次のように .PRECIOUS の依存元としてこのファイルを指定することで、対応できる様子でした。

.PRECIOUS : %.lastpush

この .PRECIOUS に指定したファイルは、中間ファイルではなく成果物として残すことができるようです。

そもそももっとスマートな Makefile の書き方があるのかも分かりませんけど、とりあえずはこんな感じでしのいでみることにします。