如何在CMake中禁用链接时间代码生成

时间:2017-12-05 13:19:21

标签: cmake

我们正在使用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

2 个答案:

答案 0 :(得分:0)

您可以手动修改 CMake缓存变量 CMAKE_EXE_LINKER_FLAGS_DEBUGCMAKE_MODULE_LINKER_FLAGS_DEBUGCMAKE_SHARED_LINKER_FLAGS_DEBUGCMAKE_STATIC_LINKER_FLAGS_DEBUG

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

答案 1 :(得分:0)

如果某些内容在生成的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"
)