Gab*_*iel 43 cmake parallel-builds
无论使用哪种构建工具,都能以某种方式实现并行构建吗?
在Unix下我们可以添加make -jN N是线程数,在Windows下我添加到CXX_FLAG "/MP" 哪个然后在Visual Studio中用于并行构建......?CMAKE_MAKE_PROGRAM当我运行CMake时,如何使我的版本不会总是扩展?
什么是一般解决方案?
我想出了这个:
# Add some multithreaded build support
MARK_AS_ADVANCED(MULTITHREADED_BUILD)
set(MULTITHREADED_BUILD 12 CACHE STRING "How many threads are used to build the project")
if(MULTITHREADED_BUILD)
if(${CMAKE_GENERATOR} MATCHES "Unix Makefiles")
message(STATUS ${CMAKE_BUILD_TOOL})
set(CMAKE_MAKE_PROGRAM "${CMAKE_MAKE_PROGRAM} -j${MULTITHREADED_BUILD}")
message(STATUS "Added arguments to CMAKE_BUILD_TOOL: ${CMAKE_MAKE_PROGRAM}")
elseif(MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP")
message(STATUS "Added parallel build arguments to CMAKE_CXX_FLAGS: ${CMAKE_CXX_FLAGS}")
endif()
endif()
Run Code Online (Sandbox Code Playgroud)
usr*_*567 28
使用CMake 3.12,这是可能的.从发行说明:
"cmake(1)"构建工具模式("cmake -build")获得了" - parallel []"和"-j []"选项以指定并行构建级别.它们映射到本机构建工具的相应选项.
编辑:正如@dkg所提到的,您还可以设置环境变量CMAKE_BUILD_PARALLEL_LEVEL.
链接到CMake的文档:
Nik*_*ita 16
正如上面已经提到的,可以使用CMake 的--parallel [<jobs>](或-j [<jobs>]) 选项来并行构建解决方案。
但我想指出的是,在 Windows 中,有一个命令
\ncmake.exe --build --parallel <jobs>\nRun Code Online (Sandbox Code Playgroud)\n使用以下参数启动根 MSBuild 进程:
\nmsbuild.exe /m:<jobs> /p:CL_MPCount=1 <another-useful-arguments...>\nRun Code Online (Sandbox Code Playgroud)\n这意味着根 MSBuild 进程将由于/m:<jobs>(或/maxcpucount:<jobs>)启动多个子 MSBuild 进程。但由于参数的原因,每个子 MSBuild 最多运行一个编译器进程/p:CL_MPCount=1(有关更多详细信息,请参阅此链接)。也就是说每个MSBuild同时最多只能编译一个源文件。
为了克服这一限制,可以通过以下方式调用 CMake:
\ncmake.exe --build --parallel <n_msbuild> -- /p:CL_MPcount=<n_cl>\nRun Code Online (Sandbox Code Playgroud)\n此方法设置/MP选项,从而允许每个 MSBuild 实例下有多个编译器进程。
并记录在案。要配置从 Visual Studio GUI 运行的构建,需要转到“设置”:
\nmaxcpucount./MP。oli*_*bre 13
如果你有makev2.8.8或更高版本,你可以使用GNUCMAKE_MAKE_PROGRAM作为替代cmake --build -j <N>
mkdir build
cd build
cmake -G Ninja ..
ninja # Parallel build (no need -j12)
Run Code Online (Sandbox Code Playgroud)
要么
mkdir build
cd build
cmake -G Ninja ..
cmake --build . # Parallel build using Ninja
Run Code Online (Sandbox Code Playgroud)
如您所见,不需要使用<N>,默认情况下,构建是并行运行的,根据可用的CPU内核优化作业数.
cmake --build -- -j <N>基于低级JSON配置来加速启动阶段.因此,它的JSON配置不容易手工编写,我总是使用高级工具/ IDE生成它:
--配置生成器由于C++构建通常需要大量内存,因此您的计算机必须提供与CPU内核数量相同的内存.
cun*_*ang 10
现在使用 cmake 并行构建非常简单。使用“cmake --build”时可以添加“-j jobs_number”。例如:
\ncmake --build . -j 24\nRun Code Online (Sandbox Code Playgroud)\n更多详细信息可以在 CMAKE 手册中找到:https://cmake.org/cmake/help/latest/manual/cmake.1.html#build-tool-mode
\n\n\n--parallel[], -j[] 构建时使用的最大并发进程数。如果省略,则使用本机 build\ntool\xe2\x80\x99s 默认编号。
\n如果设置了 CMAKE_BUILD_PARALLEL_LEVEL 环境变量,则在未给出此选项时指定默认并行级别。
\n一些本机构建工具总是并行构建。使用\n值 1 可用于限制单个作业。
\n
| 归档时间: |
|
| 查看次数: |
31036 次 |
| 最近记录: |