[英]use CMAKE to set enable incremental linking to NO in VS2012
我正在使用 cmake 2.8.0 来构建具有多个项目的 VS2012 解决方案。 对于每个项目,我希望将每个项目的属性->链接器- >启用增量链接设置为NO 。
有可能可以使用的标志,例如CMAKE_EXE_LINKER_FLAGS_DEBUG 。 我不确定,但也尝试了一些在线帮助,但没有效果。
请指教
您应该设置/INCREMENTAL:NO
链接器标志。
要在 CMake 中覆盖它,您应该遵循如何在 cmake 文件中添加链接器或编译标志中提供的技术? :
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO" )
我设法找到了解决方案。 显然许多其他标志也需要设置为/INCREMENTAL:NO
FOREACH(FLAG_TYPE EXE MODULE SHARED)
STRING (REPLACE "INCREMENTAL:YES" "INCREMENTAL:NO" FLAG_TMP
"${CMAKE_${FLAG_TYPE}_LINKER_FLAGS_DEBUG}")
STRING (REPLACE "/EDITANDCONTINUE" "" FLAG_TMP
"${CMAKE_${FLAG_TYPE}_LINKER_FLAGS_DEBUG}")
SET(CMAKE_${FLAG_TYPE}_LINKER_FLAGS_DEBUG "/INCREMENTAL:NO ${FLAG_TMP}" CACHE
STRING "Overriding default debug ${FLAG_TYPE} linker flags." FORCE)
MARK_AS_ADVANCED (CMAKE_${FLAG_TYPE}_LINKER_FLAGS_DEBUG)
ENDFOREACH ()
对我有用的解决方案是:
if(WIN32)
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/INCREMENTAL:NO")
endif()
检查WIN32
是不够的。 该标志仅表示目标系统是 Windows。 因此,如果我们在 Windows 上使用GCC
或任何其他编译器进行构建,标志/INCREMENTAL
将失败,因为它是特定于MSVC
。
对于 CMake >= 3.13 应该这样做。
if(MSVC)
target_link_options(${TARGET_NAME} <INTERFACE|PUBLIC|PRIVATE>
# $<$<CONFIG:Debug>:/INCREMENTAL> is active by default for debug
$<$<CONFIG:Release>:/INCREMENTAL:NO>
)
endif()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.