.PHONY: b
c: a
@touch c
@echo "Changed"
a: b
b:
@date +%s > a
使用示例 make 文件运行 make 会导致在第一次运行时打印“Changed”;但“已更改”仅在第 3 次、第 5 次等执行时打印。这是因为 make 似乎没有认识到执行目标“b”的配方会更新 a。
将“a”作为目标的规则更改为空配方会导致每次运行 make 时都会打印“Changed”(如您所料 - 虚假目标始终被视为“过时”)。例如
a: b ;
Make 应该跳过 PHONY 目标的隐式规则搜索,但“a”不是 PHONY。如果没有为“a”找到隐含规则,是否正确不考虑“a”可能已被其 PHONY 依赖项“b”更改?