考虑以下生成文件:
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