gpt4 book ai didi

dependencies - 为并行构建调试 CMake/Make 依赖项

转载 作者:行者123 更新时间:2023-12-04 18:16:05 26 4
gpt4 key购买 nike

我管理一个复杂的 C++ 项目,它的构建定义写在 CMake并且构建本身是通过调用 make 获得的.源代码树由许多模块组成,具有高度的可并行性。

线性构建总是成功的,而并行构建大多数时候都是成功的。当在这样的构建过程中遇到依赖问题时,我通常会去修复它,但我想以编程方式测试依赖关系,而不是在问题发生时修复它们。

理想的解决方案是遍历 CMake 中的所有依赖项。并修复它们,但这在实践中并不总是可行的,因为我们大量使用自定义宏来处理某些特定于我们的源代码树的依赖项(我无法详细说明,抱歉)。因此,我正在考虑以不同的方式(并且可能是有效地)解决问题,尝试尽可能多地重用标准工具。

  • 我的第一个想法是在 Make 中注入(inject)某种“随机性”。作业调度,因此构建机器可以通过重建树来无限期地尝试不同的编译路径,直到遇到故障。另一个问题(here)但是,指出 Make 中没有此功能。 .
  • 所以我尝试了另一种解决方案:我在 g++ 周围创建了一个包装脚本为 $RANDOM sleep 秒数,在 Make 中带来一些噪音作业调度程序。当然,这种解决方案的缺点是增加了编译时间。
    然而,这种部分解决方案有一个根本缺陷:如果发现问题,则证明缺少依赖项,但是,如果没有产生错误,我们无法证明所有依赖项都是正确的。

  • 你怎么看?我怎样才能实现我的目标?我更喜欢重用标准工具并且可以应用于广泛受众的解决方案。

    谢谢。

    最佳答案

    我认为您需要使用更好的make如果你真的想有效地解决这个问题。 Electric Make(ElectricAccelerator 的一部分)是 make 的 GNU make 兼容变体它会在你的构建过程中监控文件系统访问,并自动detect and correct problems caused by out-of-order execution .此外,ElectricMake 可以生成 annotated build log这将向您显示构建中的每个作业访问了哪些文件,以及作业之间的依赖关系(显式和隐式),您可以使用它们来纠正 makefile 中缺少的依赖关系。

    您可以下载试用ElectricAccelerator Huddle ,ElectricAccelerator 的免费增值版。

    免责声明:我是 ElectricAccelerator 的架构师和技术主管。

    关于dependencies - 为并行构建调试 CMake/Make 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11692584/

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