使用CMAKE在VS2012中将启用增量链接设置为NO

时间:2014-02-05 05:40:26

标签: c++ visual-studio-2012 cmake

我正在使用cmake 2.8.0构建具有多个项目的VS2012解决方案。对于每个项目,我希望设置属性 - > Linker-> 为每个项目启用增量链接

可能会使用 CMAKE_EXE_LINKER_FLAGS_DEBUG 等标记。我不确定,尝试了一些在线帮助也没有效果。

请告知

4 个答案:

答案 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()

target_link_options docs