并行运行代码,但使用 CMake 和/或 Make 按顺序运行部分
Run code parallel but sections sequentially with CMake and/or Make?
我正在使用CMake构建我的项目。此项目使用多个外部库,其中一个库未正确指定其依赖项。这会导致我的构建在运行并行生成作业时失败。我想知道 cmake 和/或 make 中是否有一个功能可以串行运行某段代码和其他所有内容。
更具体地说,我正在使用FindCUDA.cmake模块,并在其中使用cuda_add_executable&cuda_add_library。我相当确信,在构建 CUDA 库时,FindCUDA 模块没有列出其依赖项,从而导致在读取和写入中间对象文件到磁盘时出现竞争条件。有没有办法我可以简单地串行运行cuda_add_library宏,同时并行运行构建的其余部分?
所有 CMake 代码都是单线程运行的。CMake 开发人员已经通过错误跟踪器等多次联系,如果他们可以实现一些并行功能,但每次都被拒绝。
截至目前(当前的CMake v3.24.3),我不知道有任何并行内置功能。CMake 根本不并行执行。CMake 提供了一种统一的方式来指示构建系统(MSBuild、Make、Ninja 等)并行构建(参见文档 CMake -j
switch),但之后责任将移交给构建系统。
如果CMake不支持,则很难通过CMake同步其他软件的任何输出。
如果您在 CMake 中的项目结构支持它,则可以通过使用 的答案(此处)usr1234567
描述的方法绕过此限制。
据我所知,您不能影响每个目标的构建并行性。但是你可以解决这个问题。
您可以先构建需要按顺序构建的目标(或具有重复调用的多个目标)
cmake --build . --target seq_target -j 1
然后你可以构建整个项目,所以剩下的一切都可以并行构建。已构建的不会再次构建,因此不会发生错误:
cmake --build . -j 8
- CMake-按正确顺序将项目与C运行时对象文件链接
- 函数调用中参数的顺序重要吗
- 为什么不;名字在地图上是按顺序排列的吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 数到第n个楼梯的路(顺序无关紧要)
- 优先顺序:智能指针和类析构函数
- 在循环中按顺序遍历成员变量
- 独立读取-修改-写入顺序
- QML按钮点击功能执行顺序
- C++中数据类型修饰符的顺序
- 当比特(而不是字节)的顺序至关重要时的持久性
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 通过选项卡的文本设置QTabWidget顺序
- c++11评估顺序(未定义的行为)
- 如何在C++中递归地按相反顺序打印集合
- 给定顺序中的事件处理
- 具有包含其他对象的类的对象创建顺序
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 并行运行代码,但使用 CMake 和/或 Make 按顺序运行部分