set (CMAKE_CONFIGURATION_TYPES "Debug;Release")
时间: 2023-08-06 18:08:00 浏览: 283
这是一个CMake命令,用于设置可用的构建类型(build type)列表,包括Debug和Release。CMake是一个跨平台的构建自动化工具,能够根据不同的编译器和操作系统生成相应的构建文件,如Makefile或Visual Studio解决方案文件。设置构建类型是为了方便在不同的条件下构建不同版本的程序,例如Debug版本包含调试信息,而Release版本则进行了优化以提高性能。
相关问题
CMAKE_BUILD_TYPE VS
### 正确配置 `CMAKE_BUILD_TYPE` 与 Visual Studio 构建类型
Visual Studio 支持多配置生成器,这意味着可以在构建时而不是在配置时指定构建类型。因此,在使用 CMake 配置项目时不需要显式设置 `CMAKE_BUILD_TYPE` 变量[^2]。
然而,如果希望强制特定的构建配置(例如 Debug 或 Release),可以通过命令行传递 `-DCMAKE_BUILD_TYPE=Debug` 或者通过 CMake GUI 设置此选项来实现。需要注意的是,这种方法适用于单配置生成器;对于像 Visual Studio 这样的多配置生成器来说并不是最佳实践[^1]。
为了确保 IntelliSense 功能正常工作并能识别到正确的编译器路径,建议采用如下方式:
#### 使用 CMakePresets.json 文件定义预设
现代版本的 CMake 推荐使用 `CMakePresets.json` 来管理不同环境下的构建参数。可以创建一个包含多种配置类型的 preset 文件,这样就不必每次都手动输入这些参数了。
```json
{
"version": 3,
"configurePresets": [
{
"name": "vs-debug",
"displayName": "VS Debug Configuration",
"description": "Generates a VS solution with debug settings.",
"generator": "Visual Studio 17 2022",
"binaryDir": "${sourceDir}/build/vs/debug",
"architecture": "x64",
"cacheVariables": {
"CMAKE_CXX_COMPILER": "cl.exe"
},
"toolchainFile": "",
"environment": {},
"inheritEnvironments": ["msvc"]
}
]
}
```
#### 修改 CMakeLists.txt 文件适应多配置生成器
避免直接依赖于 `CMAKE_BUILD_TYPE` 的条件判断语句,而是利用其他机制区分不同的构建模式。比如,可以通过定义额外的目标属性或特性来进行更灵活的控制。
```cmake
if(NOT DEFINED CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug CACHE STRING "Choose the type of build." FORCE)
endif()
set_property(TARGET my_target PROPERTY DEBUG_POSTFIX "_d")
target_compile_definitions(my_target PRIVATE $<$<CONFIG:Debug>:DEBUG>)
# 更推荐的方式是基于政策 CM0091 使用 generator expressions 定义调试宏
add_executable(example example.cpp)
target_compile_options(example PRIVATE "$<$<CONFIG:Debug>:/Od>" )
```
上述代码片段展示了如何为名为 `my_target` 的目标添加 `_d` 后缀作为其调试库名称的一部分,并仅当处于调试配置下才定义 `DEBUG` 宏。
cmake CONFIGURATIONS
CMake是一个跨平台的开源构建工具,用于管理软件项目的构建过程。在CMake中,CONFIGURATIONS是一个用于指定不同构建配置的变量。
构建配置是指在不同的环境或条件下,对软件项目进行不同的构建设置。例如,可以定义一个Debug配置用于调试目的,一个Release配置用于发布版本,以及其他自定义的配置。
在CMake中,可以使用set命令来定义CONFIGURATIONS变量,并为每个配置指定相应的构建选项。例如:
```
set(CONFIGURATIONS Debug Release)
```
然后,可以使用if命令根据当前的构建配置执行不同的操作。例如:
```
if(CMAKE_CONFIGURATION_TYPES)
foreach(config ${CMAKE_CONFIGURATION_TYPES})
if(config STREQUAL "Debug")
# 在Debug配置下执行的操作
elseif(config STREQUAL "Release")
# 在Release配置下执行的操作
endif()
endforeach()
else()
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
# 在Debug配置下执行的操作
elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
# 在Release配置下执行的操作
endif()
endif()
```
阅读全文
相关推荐














