gpt4 book ai didi

cmake - 从 CMake 设置 'make' 默认使用 '-j' 选项

转载 作者:行者123 更新时间:2023-12-04 02:09:20 24 4
gpt4 key购买 nike

我希望我的 CMake 项目由 make -j N 构建, 每当我打电话 make从终端。我不想设置 -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})

非常感谢。

最佳答案

通过设置 CMAKE_MAKE_PROGRAM要影响构建过程的变量。但:

  • 此变量仅通过 cmake --build 影响构建, 不在 native 工具 ( make ) 上调用:

    The CMAKE_MAKE_PROGRAM variable is set for use by project code. The value is also used by the cmake(1) --build and ctest(1) --build-and-test tools to launch the native build process.

  • 这个变量应该是一个缓存变量。它被类似 make 的生成器以这种方式使用:

    These generators store CMAKE_MAKE_PROGRAM in the CMake cache so that it may be edited by the user.



    也就是说,你需要设置这个变量
    set(CMAKE_MAKE_PROGRAM <program> CACHE PATH "Path to build tool" FORCE)
  • 此变量应引用 可执行文件 本身,而不是带有参数的程序:

    The value may be the full path to an executable or just the tool name if it is expected to be in the PATH.



    也就是说,值“make -j 2”不能用于该变量(将参数拆分为列表
    set(CMAKE_MAKE_PROGRAM make -j 2 CACHE PATH "Path to build tool" FORCE)

    也无济于事)。

  • 总之,您可以重新定义 cmake --build 的行为。调用将 CMAKE_MAKE_PROGRAM 变量设置为 脚本 , 调用 make具有并行选项。但是你 可能不会影响直接 make 的行为电话 .

    关于cmake - 从 CMake 设置 'make' 默认使用 '-j' 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41684793/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com