CMake CMAKE_CXX_FLAGS无意中启用了优化

时间:2015-10-14 02:22:54

标签: cmake

在我的一个CMakeLists.txt中,我有以下说明:

IF ( MSVC )
    SET ( CMAKE_CXX_FLAGS_DEBUG "/MDd" )
)

创建MSVC 10.0解决方案后,上述代码意外启用了优化(/ O2)。我确定我没有在其他地方启用它。

为什么?

1 个答案:

答案 0 :(得分:1)

根据您的问题中的代码,您隐藏了CMake确实应用的默认参数 - 包括优化级别。

请尝试使用

附加您的选项
SET ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd" )

或使用generator expressionsadd_compile_options()

add_compile_options("$<$<CONFIG:Debug>:/MDd>")

但是您可能不需要这个特定选项,因为/MDd已经是CMake默认MSVC调试标志设置的一部分。

<强>背景

如果您查看CMake的Windows-MSVC.cmake,您会看到以下初始化设置:

set(CMAKE_${lang}_FLAGS_DEBUG_INIT "/D_DEBUG /MDd /Zi /Ob0 /Od ${_RTC1}")

不会更改CMakeLists.txt中的任何标记,您会看到CMakeCache.txt

//Flags used by the compiler during debug builds.
CMAKE_CXX_FLAGS_DEBUG:STRING=/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1

使用您的代码隐藏此缓存变量,最终只会使用/MDd

<强>参考