gpt4 book ai didi

build - 并行 GNU Make 为 Antlr 解析器生成文件多次运行命令

转载 作者:行者123 更新时间:2023-12-01 01:19:02 27 4
gpt4 key购买 nike

我有一个生成文件规则来生成 antlr 解析器的输出文件:

XLexer.c XLexer.h XParser.c XParser.h X.tokens: X.g
$(ANTLR) $(ANTLRFLAGS) X.g

正如预期的那样,当 X.g 更改时,这可以正常工作并重建所有生成的文件。但是当我使用 -j 标志运行并行 make 时,上述规则对每个文件运行一次,因此在这种情况下,antlr 调用并行运行 5 次。

有没有办法执行这种类型的规则但只运行一次命令?我知道 .NOPARALLEL: 规则,但这违背了目的。如果一个已经在运行但没有成功,我试图使用一个锁定文件来导致多个运行退出。

最佳答案

除非所有的输出文件共享一个共同的词干(例如,“XLexer.c”和“XLexer.h”的词干为“XLexer”),否则在GNU make 中没有干净的方法可以做到这一点。有多种解决方法,例如使用哨兵文件:

XLexer.c XLexer.h XParser.c XParser.h X.tokens: dummy
@

dummy: X.g
$(ANTLR) $(ANTLRFLAGS) X.g && touch dummy

Rules with Multiple Outputs in GNU Make 中对选项进行了详尽的描述。关于 CMCrossroads 的 Make 先生专栏的文章。

(“@”行是一个“no-op”命令,但它很重要:没有它,GNU make 会假设 XLexer.c 和 friend 永远不会通过增量重建更新,所以你必须运行两次 make X.g 中的更改生效)

或者,您可以使用更智能的 make 版本,例如 ElectricAccelerator ,它会自动为您解决这个问题(免责声明:我是 ElectricAccelerator 的架构师)。

关于build - 并行 GNU Make 为 Antlr 解析器生成文件多次运行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10337866/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com