【问题标题】:How to disable link time code generation in CMake如何在 CMake 中禁用链接时间代码生成
【发布时间】:2018-05-19 04:11:42
【问题描述】:

我们将 CMake 与 Visual Studio 2015 生成器一起使用,我正在尝试在调试构建配置下禁用库和可执行文件的链接时间代码生成。似乎当我用

修改链接器标志时

SET_TARGET_PROPERTIES(${_PROJNAME} PROPERTIES LINK_FLAGS_DEBUG "${LINK_FLAGS_DEBUG} /LTCG:OFF")

CMake 仍然在链接器附加选项中生成带有/LTCG:INCREMENTAL 的解决方案,但也附加了/LTGC:OFF。有谁知道一种方法可以为所有配置完全关闭 LTCG,以便我可以仅为那些我们希望启用它的配置启用它?

cmake version 3.10.0-rc2

【问题讨论】:

    标签: cmake


    【解决方案1】:

    如果生成的 VS 项目中的“附加选项”下出现某些内容,则表示 CMake 无法识别给定的选项(因此没有替换自己的默认选项)。

    CMake's source cmVS141LinkFlagTable.h:

    { "LinkTimeCodeGeneration", "", "Default", "Default", 0 },
    { "LinkTimeCodeGeneration", "LTCG:incremental", "Use Fast Link Time Code Generation", "UseFastLinkTimeCodeGeneration", 0 },
    { "LinkTimeCodeGeneration", "LTCG", "Use Link Time Code Generation", "UseLinkTimeCodeGeneration", 0 },
    { "LinkTimeCodeGeneration", "LTCG:PGInstrument", "Profile Guided Optimization - Instrument", "PGInstrument", 0 },
    { "LinkTimeCodeGeneration", "LTCG:PGOptimize", "Profile Guided Optimization - Optimization", "PGOptimization", 0 },
    { "LinkTimeCodeGeneration", "LTCG:PGUpdate", "Profile Guided Optimization - Update", "PGUpdate", 0 },
    

    但如果我查看 CMake 的 VS 2015 默认值:

    CMAKE_EXE_LINKER_FLAGS = /machine:X86
    CMAKE_EXE_LINKER_FLAGS_DEBUG = /debug /INCREMENTAL
    CMAKE_EXE_LINKER_FLAGS_RELEASE = /INCREMENTAL:NO
    

    默认值中没有/LTCG:INCREMENTAL。所以我认为你真正在寻找/对你有帮助的是:

    set_property(
        TARGET ${_PROJNAME} 
        APPEND_STRING 
        PROPERTY 
            LINK_FLAGS_DEBUG " /INCREMENTAL:NO"
    )
    

    【讨论】:

    • 感谢 Florian,这有助于发现问题。在调试中逐步完成 CMake 之后,我发现我们实际上以一种有点模糊的方式包含了标志。出于完整性考虑,/INCREMENTAL 和 /LTCG:INCREMENTAL 是不同的选项,一个控制增量链接,另一个控制增量链接时间代码生成。
    【解决方案2】:

    您可以根据需要手动修改 CMake 缓存变量 CMAKE_EXE_LINKER_FLAGS_DEBUGCMAKE_MODULE_LINKER_FLAGS_DEBUGCMAKE_SHARED_LINKER_FLAGS_DEBUGCMAKE_STATIC_LINKER_FLAGS_DEBUG

    您可以从这些变量中删除 /INCREMENTAL 标志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 2010-12-10
      • 2022-12-13
      • 2023-01-10
      相关资源
      最近更新 更多