全力で怠けたい

怠けるために全力を尽くしたいブログ。

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 をターゲットに付与しても問題はない。

*1:自分が使うすべての Makefile のすべてのターゲットが phony ターゲットというわけではないが