CMake 和缓慢的 MSVC 编译
CMake and slow MSVC compilation
CMake 为 MSVC 10 (2010) 生成项目并且构建时间相对较短,即。在我为给定项目单击构建后,它会在几秒钟内开始编译,这是预期的。
对于 Qt Creator,我选择 CodeBlocks - NMake Makefiles 作为 CMake 生成器,将构建配置设置为使用与上述相同的目标。当我点击构建时,我看到
cmake --build . --target name
沉默大约 2 分钟。然后
Scanning dependencies for ...
又沉默了 1.5 分钟。
更糟糕的是——以后的编译只使用 1 个线程。所以编译时间是......长得令人无法接受。
我应该如何配置项目以实现与在 MSVC 下相当的短编译时间?我试过 Qt Creator 4.3 Beta 和
NMake 和 NMake JOM 很慢。
当我更改为 Ninja 构建系统时 - 编译时间与 MSVC 中的编译时间相似。
CMake 默认不构建多处理器。所以由你来强制它...
您可以在使用 cmake 配置项目时指定 /MP
标志。
cmake -G "<MSVC-Generator>" -DCMAKE_CXX_FLAGS="/MP" <target_dir>
我对文件 CMakeLists.txt 中的所有 cmake 项目都这样做,因此客户不必:
if(MSVC)
target_compile_options(<target> PRIVATE "/MP")
endif()
CMake 使用默认参数调用编译器,即使用单线程构建,即使对于 MSVC 也是如此。您在 MSVS 中的构建速度更快,因为 Visual Studio 使用为多处理器构建配置的设置调用编译器。
如何为 CodeBlocks - NMake Makefiles
或其他 cmake generators 使用多处理器构建?
添加-jn
option for gcc
编译器:
cmake --build . --target name -- -j4
cmake --build . --target name -- /m
对于 MSVS 2017 或更新版本,您可以使用 -m
form 而不是 /m
。此外,您还可以指定构建时要使用的最大并发进程数-m:3
。
CMake 为 MSVC 10 (2010) 生成项目并且构建时间相对较短,即。在我为给定项目单击构建后,它会在几秒钟内开始编译,这是预期的。
cmake --build . --target name
沉默大约 2 分钟。然后Scanning dependencies for ...
又沉默了 1.5 分钟。
更糟糕的是——以后的编译只使用 1 个线程。所以编译时间是......长得令人无法接受。
我应该如何配置项目以实现与在 MSVC 下相当的短编译时间?我试过 Qt Creator 4.3 Beta 和
NMake 和 NMake JOM 很慢。 当我更改为 Ninja 构建系统时 - 编译时间与 MSVC 中的编译时间相似。
CMake 默认不构建多处理器。所以由你来强制它...
您可以在使用 cmake 配置项目时指定 /MP
标志。
cmake -G "<MSVC-Generator>" -DCMAKE_CXX_FLAGS="/MP" <target_dir>
我对文件 CMakeLists.txt 中的所有 cmake 项目都这样做,因此客户不必:
if(MSVC)
target_compile_options(<target> PRIVATE "/MP")
endif()
CMake 使用默认参数调用编译器,即使用单线程构建,即使对于 MSVC 也是如此。您在 MSVS 中的构建速度更快,因为 Visual Studio 使用为多处理器构建配置的设置调用编译器。
如何为 CodeBlocks - NMake Makefiles
或其他 cmake generators 使用多处理器构建?
添加-jn
option for gcc
编译器:
cmake --build . --target name -- -j4
cmake --build . --target name -- /m
对于 MSVS 2017 或更新版本,您可以使用 -m
form 而不是 /m
。此外,您还可以指定构建时要使用的最大并发进程数-m:3
。