考虑下面的Makefile:
foo :
mkdir foo
foo/a.out : foo a.in
cp a.in foo/a.out
foo/b.out : foo b.in
cp b.in foo/b.out
与它下面的互动,从包含文件的目录开始a.in
和b.in
,没有别的:
$ make foo/a.out
mkdir foo
cp a.in foo/a.out
到现在为止还挺好。
$ make foo/b.out
cp b.in foo/b.out
还是不错的,但现在:
$ make foo/a.out # a.out should be up to date now!
cp a.in foo/a.out
它重建a.out
目标,即使没有任何先决条件,已经改变了。
这似乎是发生了什么事是,当foo/b.out
创建,目录的最后修改时间foo
被更新,所以挑选一个了具有“改变”。
是否有办法避免这种情况? 例如,有没有声明的方式foo/a.out
取决于foo
仅在foo
已经存在了,里面的文件的创建foo
不会导致foo
被认为已经过时?