我正在使用cmake 2.8.0构建具有多个项目的VS2012解决方案。对于每个项目,我希望设置属性 - > Linker-> 为每个项目启用增量链接为否。
可能会使用 CMAKE_EXE_LINKER_FLAGS_DEBUG 等标记。我不确定,尝试了一些在线帮助也没有效果。
请告知
答案 0 :(得分:1)
您应该设置/INCREMENTAL:NO
linker flag。
要在CMake中覆盖它,您应该遵循How to add linker or compile flag in cmake file?中提供的技术:
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /INCREMENTAL:NO" )
答案 1 :(得分:1)
对我有用的解决方案是:
if(WIN32)
set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/INCREMENTAL:NO")
endif()
答案 2 :(得分:0)
我设法找到了解决方案。显然还需要将很多其他标志设置为 / 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 ()
答案 3 :(得分:0)
检查 WIN32
是不够的。 The flag only means that the target system is 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()