繁体   English   中英

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

[英]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()

target_link_options 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM