【问题标题】:use CMAKE to set enable incremental linking to NO in VS2012在VS2012中使用CMAKE设置启用增量链接到NO
【发布时间】:2014-02-05 05:40:26
【问题描述】:

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

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

请指教

【问题讨论】:

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


【解决方案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" )

【讨论】:

  • 嗨,我试过这种方法,但它不起作用。它对你有用吗?我还在某处读到,必须在项目SET(MSVC_INCREMENTAL_DEFAULT ON) PROJECT(XXX) 上方添加以下行是否正确?
  • 这不起作用。在 CMAKE 内部深处的某个地方,它默认设置“/INCREMENTAL:YES”,将“/INCREMENTAL:NO”添加到 CMAKE_EXE_LINKER_FLAGS 不会覆盖它。
【解决方案2】:

我设法找到了解决方案。显然许多其他标志也需要设置为 /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】:

    适合我的解决方案是:

    if(WIN32)
        set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS "/INCREMENTAL:NO")
    endif()
    

    【讨论】:

      【解决方案4】:

      检查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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-09-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        • 2021-11-15
        • 2016-04-18
        相关资源
        最近更新 更多