当我在 ninja 中有一个包含多个输出的规则时,它假定所有输出都已更新,并且它们的所有依赖项都被重建,即使它们根本没有改变。
这通常会出现代码生成步骤,例如解析器生成器。
例如对于 LEMON 解析器生成器:
rule lemon
command = lemon $in
build grammar.c grammar.h grammar.out: lemon grammar.y
如果在运行 LEMON 后grammar.y
得到更新但grammar.h
没有改变。LEMON 检测到这一点并且不更新文件。尽管如此,忍者重建了所有依赖的东西grammar.h
。
我该如何防止这种情况?