热到不依赖于与GNU Make的依赖关系的原子创建
Hot to not rely on atomic creation of dependencies with GNU Make?
在我的构建系统中,一些头文件是自动生成的。他们这一代需要一些时间。生成器首先在文件系统中创建一个空文件,然后写入内容 - 因此有一个小的时间窗口,在此期间文件存在并且为空。
这会导致并行构建错误:进程 A 需要标头file.h
并启动其生成命令。进程 B 需要相同的文件;如果它似乎在提到的时间窗口内开始编译,编译器将看到依赖项就位,获取空标头并在编译错误时中止。
解决此类问题的正确方法是什么?我正在寻找GNU Make的解决方案,但也非常感谢一般的考虑。
你还没有给出完整的故事。只需告诉它什么配方使有问题的头文件,您的并行构建开始工作。
如果相同的配方同时构建多个标头,这可能有点棘手。在制作中对此进行编码的唯一方法是使用纯模式规则,我不喜欢那些(您希望模式仅与显式标头列表匹配,不再匹配)。不可避免地,标头不会以相同的时间戳结束( ls -l -t --full-time
),所以你可以假装它们是一个接一个地制作的。
草图:
# Headers created by the recipe are h0.h h1.h h2.h
h0.h: h1.h
h1.h: h2.h
h2.h:
recipe line 1
recipe line 2
现在,当make想要编译包含h1.h
(例如)的f.c
时,它意识到它必须等待h2.h
由它的配方建立,然后才开始编译f.c
.
相关文章:
- C++GTKMM gui循环依赖关系
- 如何在头文件中声明类模板(由于循环依赖关系)
- 对在不同二进制文件中创建的对象文件的依赖关系
- 使用Bazel构建具有不同编译器/链接器选项的C/C++依赖关系
- OpenVINO - 推理库插件 libMKLDNNPlugin.so 无法解析依赖关系
- 模拟测试中类的依赖关系
- C++模板方法中的循环依赖关系
- 解析正交模块的依赖关系
- 如何在 Mac OS 上安装 boost-mpi 及其对 clang 的依赖关系?
- Wt::D bo 中的循环依赖关系
- 在包含窗口标头时难以解决循环依赖关系问题
- 当依赖关系和依赖关系都是多态时,在哪个继承级别存储依赖关系指针?
- 解决循环依赖关系 c++ 的想法
- C++循环依赖关系,未声明的标识符
- C++ 中的循环依赖关系问题
- 为什么包含需要进一步的依赖关系?
- 使用 cmake 获取外部依赖关系
- CMake 外部和内部静态库的循环依赖关系
- 在没有Xcode的macOS中开发具有依赖关系的应用程序
- "std::shared_ptr"循环依赖关系是如何导致问题的