小编Cod*_*her的帖子

当 PHONY 依赖项更新时,为什么 make 不考虑没有配方过时的目标?

.PHONY: b
c: a
    @touch c
    @echo "Changed"
a: b
b:
    @date +%s > a
Run Code Online (Sandbox Code Playgroud)

使用示例 make 文件运行 make 会导致在第一次运行时打印“Changed”;但是“已更改”仅在第 3 次、第 5 次等执行时打印。这是因为 make 似乎没有意识到执行目标“b”的配方会更新 a。

将“a”作为目标的规则更改为空配方会导致每次 make 运行时打印“Changed”(正如您所期望的 - 虚假目标始终被视为“过时”)。例如

a: b ;
Run Code Online (Sandbox Code Playgroud)

Make 应该跳过对 PHONY 目标的隐式规则搜索,但“a”不是 PHONY。如果没有找到“a”的隐含规则,是否正确地不考虑“a”可能已被其 PHONY 依赖“b”改变?

makefile gnu-make

5
推荐指数
1
解决办法
1038
查看次数

标签 统计

gnu-make ×1

makefile ×1