我有一个C++项目,它使用CMake作为其构建系统。我想以下行为:在默认情况下优化CMake
如果cmake的被调用为cmake ..
,然后CMAKE_CXX_FLAGS
是-O3 -Wall -Wextra
如果cmake的被调用为cmake .. -DCMAKE_BUILD_TYPE=Debug
,然后CMAKE_CXX_FLAGS
是-g -Wall -Wextra
我尝试以下
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -Wextra")
但这有一个大问题。首先,如果使用第二次调用,则将-O3
和-g
标志传递给编译器。此外,如果我使用第二次调用并且之后的第一次调用,CMAKE_BUILD_TYPE
保留Debug
,虽然没有明确命令 - 所以我得到一个调试版本,虽然我想要一个优化版本。
为什么?我能做些什么来获得理想的行为?
这工作,直到我进行调试构建。在一个调试版本之后,即使使用'cmake ..',所有后续版本都是调试版本 – marmistrz
我不记得我在哪里读过它,但从CMakeLists.txt中设置CMAKE_BUILD_TYPE被认为是不好的做法。喜欢从CMake命令行传递它。 – roalz
@marmistrz我已经添加了为什么发生这种情况的更新,以及如何“重置”它。我试图想出一种实现隐式重置的方法,但这并不容易。 – Angew