0

我有一个类似于这样的 Makefile:

.PRECIOUS: do/%.build

do/%.install: do/%.build
    touch $@

do/%.build:
    touch $@

我的意图是所有 do/ .install 目标都依赖于 do/ .build 目标,如果构建目标的标记文件丢失,则运行构建目标的规则,如果构建目标运行安装目标邮票较新。这在第一次运行期间工作正常:

$ make do/foo.install
touch do/foo.build
touch do/foo.install

如果构建标记较新,它也可以正常工作:

$ touch do/foo.build 
$ make do/foo.install
touch do/foo.install

但是,如果存在安装标记并且缺少构建标记,则它不会按预期工作:

$ rm do/foo.build 
$ make do/foo.install
make: `do/foo.install' is up to date.

安装目标未运行。我应该怎么办?这是否与我必须添加 .PRECIOUS 行以避免自动删除构建标记的事实有关?

问候,蒂诺

4

1 回答 1

0

手册

“如果一个普通文件 b 不存在,并且 make 考虑一个依赖于 b 的目标,它总是创建 b 然后从 b 更新目标。但是如果 b 是一个中间文件[即从模式规则推断],那么 make可以不用管它。它不会打扰更新 b 或最终目标,除非 b 的某些先决条件比该目标更新,或者有其他原因更新该目标。

有几种方法可以解决这个问题,但我知道没有真正干净的方法。是否有任何其他目标依赖于buildinstall文件?

于 2013-01-23T15:50:48.130 回答