Makefile のターゲットに .PHONY を付与するワンライナー。
Makefile のターゲットに .PHONY を付与するワンライナーのメモ。
個人的には Makefile はほぼタスクランナーとして使っていなくて、定義しているターゲットはすべて phony ターゲット になっている。 *1
ターゲットが phony ターゲットであることを make に伝えるには .PHONY <ターゲット>
を Makefile に記述する必要があるが、ときどき .PHONY
を付与し忘れることがある。
こんなときは以下のようなワンライナーを実行して、Makefile のすべてのターゲットに .PHONY
を付与している。
$ cat Makefile | \ sed '/^.PHONY/d' | \ awk '/^[-_0-9a-zA-Z]+:/{s=$1; gsub(/:.*/, "", s); print ".PHONY:", s}{print $0}' > Makefile.new
3行目の awk で .PHONY
をターゲットに付与している。
すでに記述されている .PHONY
2行目の sed で削除しているので、3行目の awk は .PHONY
が重複するかは考慮せずに無条件に .PHONY
をターゲットに付与しても問題はない。