【发布时间】:2016-07-05 07:36:21
【问题描述】:
在我的构建系统中,一些头文件是自动生成的。他们的一代需要一些时间。生成器首先在文件系统中创建一个空文件,然后写入内容 - 因此文件存在且为空的时间窗口很小。
这会导致并行构建错误:进程 A 需要标头 file.h 并启动其生成命令。进程 B 需要相同的文件;如果它似乎在提到的时间窗口内开始编译,编译器会看到依赖关系,获取空头文件并在编译错误时中止。
解决此类问题的正确方法是什么?我正在寻找 GNU Make 的解决方案,但也非常感谢一般考虑。
【问题讨论】:
-
你能不能生成一个给它另一个名字的文件,然后在它完全生成后重命名。
-
工具坏了。它不应该那样做。但是在生成该文件的规则完成之前,并行 make 不应启动列出文件先决条件的作业。您是否正确设置了规则和先决条件?
标签: c++ c makefile dependencies gnu-make