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

/m for MSVC:

cmake --build . --target name -- /m

对于 MSVS 2017 或更新版本,您可以使用 -m form 而不是 /m。此外,您还可以指定构建时要使用的最大并发进程数-m:3