我有一个使用 CMake 构建的 C++ 项目。我希望 CMakeLists.txt 中的构建配置能够构建在Release
默认模式,并内置Debug
仅当明确指定时才模式。
参考this https://cmake.org/cmake/help/v3.11/command/set.html and this https://stackoverflow.com/a/19911494/5987698,为了允许从命令行指定构建类型,我将变量设置如下:
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
for Debug
mode.
你可以使用这样的东西:
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
endif()
这样,如果 CMake 未指定任何内容,它将使用您在此处设置的任何值,否则使用提供的值。
为了防止它被用于所有后续构建,请添加
unset(CMAKE_BUILD_TYPE CACHE)
在脚本末尾,这样它就会删除所有缓存的值并依赖默认值或提供的值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)