以前、「make に無前ループ防止機能?」に書いたとおり、以下の make は毎回 foo.mk が再構築されて、makeがリスタートする。
$(warning restarting)
include foo.mk
all:
@echo $(BAR)
foo.mk: FORCE
echo "BAR:=1" > $@
.PHONY: all FORCE
FORCE:
FORCE 指定を外せば、当然ながら foo.mk が存在しない場合にだけ、 foo.mk が構築されて、make がリスタートする。
$(warning restarting)
include foo.mk
all:
@echo BAR is $(BAR)
foo.mk:
echo "BAR:=1" > $@
.PHONY: all
$ make
Makefile:1: restarting
Makefile:2: foo.mk: そのようなファイルやディレクトリはありません
echo "BAR:=1" > foo.mk
Makefile:1: restarting
BAR is 1
$ make
Makefile:1: restarting
BAR is 1
foo.mk を .PHONY 指定すると、リスタートしてくれないようだ。
$(warning restarting)
include foo.mk
all:
@echo BAR is $(BAR)
foo.mk:
echo "BAR:=1" > $@
.PHONY: all foo.mk
$ ls
Makefile
$ make
Makefile:1: restarting
Makefile:2: foo.mk: そのようなファイルやディレクトリはありません
echo "BAR:=1" > foo.mk
BAR is
$ ls
Makefile foo.mk
$ make
Makefile:1: restarting
echo "BAR:=1" > foo.mk
BAR is 1
0 件のコメント:
コメントを投稿