Mam projekt C++, który używa CMake jako system kompilacji. Chciałbym następujące zachowanie:Optymalizacja domyślnie w CMake
Jeśli cmake jest wywoływana jako cmake ..
, następnie CMAKE_CXX_FLAGS
jest -O3 -Wall -Wextra
Jeśli cmake jest wywoływana jako cmake .. -DCMAKE_BUILD_TYPE=Debug
, następnie CMAKE_CXX_FLAGS
jest -g -Wall -Wextra
Próbowałem następujące
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
set(CMAKE_CXX_FLAGS "-O3 -Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g -Wall -Wextra")
Ale to ma duży problem. Po pierwsze, jeśli używane jest drugie wywołanie, wówczas oba znaczniki -O3
i -g
są przekazywane do kompilatora. Poza tym, jeśli użyjemy drugiej inwokacji, a pierwsza po niej, CMAKE_BUILD_TYPE
pozostaje Debug
, chociaż nie jest jawnie uporządkowana, więc otrzymuję kompilację Debug, ale chcę zoptymalizowanej kompilacji.
Dlaczego? Co mogę zrobić, aby uzyskać pożądane zachowanie?
Działa to dopóki nie wykonam kompilacji debugowania. Po jednej kompilacji debugowania wszystkie kolejne są kompilacjami debugowania, nawet jeśli używa się 'cmake ..' – marmistrz
Nie pamiętam, gdzie ją przeczytałem, ale uważam, że niewłaściwa jest konfiguracja CMAKE_BUILD_TYPE z wewnątrz CMakeLists.txt . Wolisz przekazać go z wiersza poleceń CMake. – roalz
@marmistrz Dodałem aktualizację, dlaczego tak się dzieje i jak ją "zresetować". Próbuję wymyślić sposób na uzyskanie niejawnego resetu, ale nie jest to łatwe. – Angew