【发布时间】:2023-03-26 21:57:01
【问题描述】:
考虑以下生成文件:
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 被认为已过期?
【问题讨论】: