首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用CMake和/或Make并行运行代码,但各节顺序地运行吗?

使用CMake和/或Make并行运行代码,但各节顺序地运行吗?
EN

Stack Overflow用户
提问于 2016-02-17 22:42:46
回答 2查看 187关注 0票数 1

我正在使用CMake构建我的项目。此项目使用多个外部库,其中一个没有正确指定其依赖项。这会导致我的构建在运行并行make作业时失败。我想知道cmake和/或make中是否有一个特性可以串行地运行某段代码,并并行运行其他所有代码。

更具体地说,我使用的是FindCUDA.cmake模块,其中使用的是cuda_add_executable & cuda_add_library。我非常确信,在构建CUDA库时,FindCUDA模块没有列出它的依赖项,这会导致在向磁盘读取和写入中间对象文件时产生竞争条件。是否有一种方法可以简单地在并行运行我的其余构建时串行地运行cuda_add_library宏?

EN

回答 2

Stack Overflow用户

发布于 2022-11-16 08:42:13

所有CMake代码都是单线程运行的.如果CMake开发人员能够实现一些并行特性的话,他们会通过bug跟踪器等多次与他们接触,但每次都被拒绝。

到目前为止(当前的CMake v3.24.3),我还不知道任何并行内置特性。CMake根本不并行执行。CMake提供了一种统一的方法来指导构建系统(MSBuild,Make,Ninja,.)并行构建( switch),但在此之后,责任将移交给构建系统。

如果CMake不支持其他软件的输出,则很难通过CMake同步它的任何输出。

如果您在CMake中的项目结构支持它,您可以通过使用描述usr1234567的答案(here)的方法来绕过这个限制。

票数 1
EN

Stack Overflow用户

发布于 2022-11-16 08:58:53

据我所知,您不能影响每个目标的构建并行性。但你可以解决这个问题。

您可以首先构建需要按顺序构建的目标(或多次调用的多个目标)。

代码语言:javascript
运行
复制
cmake --build . --target seq_target -j 1

然后您可以构建整个项目,这样剩下的所有东西都可以并行构建。已经构建的内容没有再次生成,因此不会发生错误:

代码语言:javascript
运行
复制
cmake --build . -j 8
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35469243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档