MSVC 与 CMake 和 Ninja 生成器的增量链接
MSVC Incremental linking with CMake and the Ninja generator
我在 Windows 上使用 CMake 和 Ninja 生成器构建了一个共享库。我想使用增量链接来减少链接所需的时间。
我试图将 CMAKE_SHARED_LINKER_FLAGS
设置为 "/incremental"
但此标志始终被 CMake 附加的 "/INCREMENTAL:NO"
覆盖。
我也试过将MSVC_INCREMENTAL_DEFAULT
设置为ON
,但是没有任何效果。
那么如何使用 CMake 和 Ninja 生成器获得增量链接?
将我的评论变成答案
我在我的 VS 工具链文件中使用了类似的 SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:YES" CACHE STRING "" FORCE)
。
请注意 CMake combine/append 它的链接器标志超出了一般情况,例如CMAKE_SHARED_LINKER_FLAGS
和构建类型特定部分,如 CMAKE_SHARED_LINKER_FLAGS_RELEASE
。
因此您必须找出 CMake 在哪里为共享库设置 /INCREMENTAL:NO
- 正如您和我所做的那样 - 并用以下内容覆盖它:
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/INCREMENTAL:YES")
或者您可以遍历不同的构建配置特定变量,例如:
- CMake compile with /MT instead of /MD
- CMake: How to set a preprocessor define for all build configurations except one ?
我在 Windows 上使用 CMake 和 Ninja 生成器构建了一个共享库。我想使用增量链接来减少链接所需的时间。
我试图将 CMAKE_SHARED_LINKER_FLAGS
设置为 "/incremental"
但此标志始终被 CMake 附加的 "/INCREMENTAL:NO"
覆盖。
我也试过将MSVC_INCREMENTAL_DEFAULT
设置为ON
,但是没有任何效果。
那么如何使用 CMake 和 Ninja 生成器获得增量链接?
将我的评论变成答案
我在我的 VS 工具链文件中使用了类似的 SET(CMAKE_EXE_LINKER_FLAGS_RELEASE "/INCREMENTAL:YES" CACHE STRING "" FORCE)
。
请注意 CMake combine/append 它的链接器标志超出了一般情况,例如CMAKE_SHARED_LINKER_FLAGS
和构建类型特定部分,如 CMAKE_SHARED_LINKER_FLAGS_RELEASE
。
因此您必须找出 CMake 在哪里为共享库设置 /INCREMENTAL:NO
- 正如您和我所做的那样 - 并用以下内容覆盖它:
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/INCREMENTAL:YES")
或者您可以遍历不同的构建配置特定变量,例如:
- CMake compile with /MT instead of /MD
- CMake: How to set a preprocessor define for all build configurations except one ?