我有一個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