LoginSignup
3
3

More than 5 years have passed since last update.

Makefileをタスクランナーとして使うときに .PHONY を自動生成する

Last updated at Posted at 2018-11-22

タスクランナーとして 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 に並べてあげるだけです。

便利。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3