【发布时间】:2017-01-16 20:51:13
【问题描述】:
每当我从终端调用 make 时,我希望我的 CMake 项目由 make -j N 构建。我不想每次都手动设置-j 选项。
为此,我将 CMAKE_MAKE_PROGRAM 变量设置为特定的命令行。我使用ProcessorCount() 函数,它给出了并行执行构建的处理器数量。
当我执行make 时,我看不到任何加速。但是,如果我使用make -j N,那么它的构建速度肯定会更快。
你能帮我解决这个问题吗? (我正在 Linux 上开发它。)
这是我在CMakeList.txt中使用的代码的sn-p:
include(ProcessorCount)
ProcessorCount(N)
message("number of processors: " ${N})
if(NOT N EQUAL 0)
set(CTEST_BUILD_FLAGS -j${N})
set(ctest_test_args ${ctest_test_args} PARALLEL_LEVEL ${N})
set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} -j ${N}")
endif()
message("cmake make program" ${CMAKE_MAKE_PROGRAM})
非常感谢。
【问题讨论】:
-
你的代码没有任何部分运行任何东西。那么,你想加速什么?请注意,cmake 阶段不能并行化:CMake 脚本是按顺序逐行处理的,就像在其他脚本语言(如 python)中一样。相反,构建阶段可以并行化,
make -j正是这样做的。 -
关于 CMake / 构建性能的一些建议:stackoverflow.com/q/37327526/2799037
-
我知道它没有运行,它是 CMakeList.txt 的一部分,我只是想设置 CMAKE_MAKE_PROGRAM 并想在每次调用 make 时调用“make -j N”终端,而不是每次都在终端中显式设置,
-
我建议使用
ninja代替make。它速度更快,并且默认使用所有可用的内核进行编译/链接。 -
@DrJ:我已将您的评论添加到问题帖子中,因为它澄清了很多问题。将来,倾向于通过您的双手来做到这一点。在 Stack Overflow 上,描述问题的所有信息都应在问题帖子中。评论是临时的。
标签: cmake parallel-builds