У меня есть проект C ++, который построен с использованием CMake. Мне бы хотелось, чтобы конфигурация сборки в CMakeLists.txt была такой, чтобы по умолчанию она строилась в режиме Release
, а в режиме Debug
- только в случае явного указания.
Обращаясь к this и this , чтобы разрешить указание типа сборки из командной строки, я установил переменную следующим образом:
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
Однако это кэширует тип сборки из последней сборки, поэтому, если последняя сборка была Debug
, мне нужно явно указать Release
в следующей сборке.
Я пытался использовать FORCE
, а также пытался добавить
unset(CMAKE_BUILD_TYPE CACHE)
до set()
, но оба эти метода фиксируют значение на Release
и переопределяют значение, указанное пользователем.
Есть ли способ достичь этого? Спасибо.
MCVE:
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
set(CMAKE_CXX_STANDARD 11)
project(Test LANGUAGES CXX)
set(CMAKE_BUILD_TYPE Release CACHE STRING "")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DDEBUG")
file(GLOB SOURCES *.cpp)
add_executable(test ${SOURCES})
test.cpp
#include <iostream>
int main() {
#ifdef DEBUG
std::cout << "Debug defined" << std::endl;
#else
std::cout << "Debug not defined" << std::endl;
#endif
return 0;
}
Для сборки я использую
cmake .
make
Первый шаг может иметь -DCMAKE_BUILD_TYPE=Debug
для режима Debug
.