CMAKE并行构建问题

时间:2019-03-23 08:00:41

标签: cmake

我有一个基于make的外部项目,我能够成功编译链接。 (我修改了第三方项目的make infra,将大型make分成多个较小的make,以便可以并行运行不同的小型make,但这与这个问题正交)

第三方cmake如下

External_Project_Add( ...
             ....
             #NO BUILD_COMMAND) 

但是编译速度太慢,我可以看到最大编译数量不超过8个线程,CPU利用率约为20%。 (我们也使用distcc)。 如果我更改如下

External_Project_Add( ...
             ....
         BUILD_COMMAND ${CMAKE_COMMAND} --build <dir> --parallel --)

编译速度至少快3倍。但是,有时系统会用完PID。

是否可以控制CMAKE可用的最大PID /进程数?

我曾考虑过使用-j选项是BUILD_COMMAND,但是它会人为地减少可用于我的系统的编译计算量。

我尝试将我的第三方make中的$(MAKE)更改为-jn,但随后显示Jobserver域警告。改变第三方品牌也不是一个好主意。所以我放弃了这个主意。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

$ cmake --build . --help
Unknown argument --help
Usage: cmake --build <dir> [options] [-- [native-options]]
Options:
  -j [<jobs>] --parallel [<jobs>] = Build in parallel using
                   the given number of jobs. If <jobs> is omitted
                   the native build tool's default number is used.
                   The CMAKE_BUILD_PARALLEL_LEVEL environment variable
                   specifies a default parallel level when this option
                   is not given.

cmake-j-j <jobs>请求传递给构建工具。 cmake --build将根据使用的生成器运行适当的构建工具,并将添加正确的选项以运行并行构建。因此,只需使用-j <jobs>来限制请求的作业的最大数量。