我们正在使用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
答案 0 :(得分:0)
您可以手动修改 CMake缓存变量 CMAKE_EXE_LINKER_FLAGS_DEBUG
,CMAKE_MODULE_LINKER_FLAGS_DEBUG
,CMAKE_SHARED_LINKER_FLAGS_DEBUG
和CMAKE_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"
)