Has*_*ein 11 cmake parallel-builds
make -j N每当我make从终端打电话时,我都想建立我的CMake项目.我不想-j每次都手动设置选项.
为此,我将CMAKE_MAKE_PROGRAM变量设置为特定的命令行.我使用该ProcessorCount()函数,它提供了并行执行构建的处理器数量.
当我这样做时make,我看不到任何加速.但是,如果我这样做make -j N,那么它的构建肯定会更快.
你能帮我解决这个问题吗?(我在Linux上开发这个.)
以下是我使用的代码片段CMakeList.txt:
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})
Run Code Online (Sandbox Code Playgroud)
非常感谢你.
如果您想加速构建,可以并行运行多个make进程,但不能运行cmake.要使用预定义数量的并行进程执行每个构建,您可以在MAKEFLAGS中定义它.
在您的环境脚本中设置MAKEFLAGS,例如〜/ .bashrc:
export MAKEFLAGS=-j8
Run Code Online (Sandbox Code Playgroud)
在Linux上,以下将MAKEFLAGS设置为CPU - 1的数量:(在构建时保留一个CPU可用于其他任务),并且在具有动态资源的环境中非常有用,例如VMware:
export MAKEFLAGS=-j$(($(grep -c ^processor /proc/cpuinfo) - 0))
Run Code Online (Sandbox Code Playgroud)
通过设置CMAKE_MAKE_PROGRAM变量,您希望影响构建过程。但:
该变量仅影响通过构建cmake --build,而不影响本机工具(make)调用:
该
CMAKE_MAKE_PROGRAM变量设置为供项目代码使用。--buildcmake(1)和 ctest(1)工具也使用该值--build-and-test来启动本机构建过程。
该变量应该是CACHE变量。它由类似make的生成器以这种方式使用:
这些生成器将 CMAKE_MAKE_PROGRAM 存储在 CMake 缓存中,以便用户可以对其进行编辑。
也就是说,您需要设置此变量
set(CMAKE_MAKE_PROGRAM <program> CACHE PATH "Path to build tool" FORCE)
Run Code Online (Sandbox Code Playgroud)该变量应该引用可执行文件本身,而不是带有参数的程序:
该值可以是可执行文件的完整路径,或者如果预期位于 PATH 中,则只是工具名称。
也就是说,值“make -j 2”不能用于该变量(将参数分割为列表
set(CMAKE_MAKE_PROGRAM make -j 2 CACHE PATH "Path to build tool" FORCE)
Run Code Online (Sandbox Code Playgroud)
也无济于事)。
总之,您可以通过将CMAKE_MAKE_PROGRAMcmake --build变量设置为script来重新定义调用的行为,该脚本使用并行选项进行调用。但可能不会影响你直接调用的行为。makemake
| 归档时间: |
|
| 查看次数: |
9234 次 |
| 最近记录: |