2012年7月14日土曜日

make のリスタートあり/なし


以前、「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 件のコメント:

コメントを投稿