タスクランナーとして Makefile を使うときに、ターゲットと同じファイルがあっても良いように .PHONY
ターゲットを書きますよね?
でも面倒じゃないですか。というわけで思いつきました。.PHONY
を自動生成すれば良いのです。
x:
echo $@
y:
touch $@
z:
touch $@
NO_PHONY = /^(z):/
.PHONY: $(shell cat $(MAKEFILE_LIST) | awk -F':' '/^[a-z0-9_-]+:/ && !$(NO_PHONY) {print $$1}')
% make x
echo x
x
% make y
touch y
% make y
touch y
% make z
touch z
% make z
make: 'z' は更新済みです.
NO_PHONY
に正規表現を書いておけば、それらは .PHONY
に含まれません。
複数のターゲットをまとめて書いてたり、変数にしてる場合には対応できてないですけど、タスクランナーとして使う場合あまりやらないのでそこはまぁ良いでしょう。必要なら .PHONY
に並べてあげるだけです。
便利。