在我的一个CMakeLists.txt中,我有以下说明:
IF ( MSVC )
SET ( CMAKE_CXX_FLAGS_DEBUG "/MDd" )
)
创建MSVC 10.0解决方案后,上述代码意外启用了优化(/ O2)。我确定我没有在其他地方启用它。
为什么?
答案 0 :(得分:1)
根据您的问题中的代码,您隐藏了CMake确实应用的默认参数 - 包括优化级别。
请尝试使用
附加您的选项SET ( CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MDd" )
或使用generator expressions和add_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
。
<强>参考强>