目录
CMake 的构建配置是指在构建项目时所选择的编译器配置选项,例如 Debug、Release、RelWithDebInfo 和 MinSizeRel 等。这些配置选项会影响编译器的行为和生成的可执行文件的性能和大小。合理地配置构建选项对于开发和调试软件非常重要。
1. 构建配置概述
在 CMake 中,构建配置通常通过以下几种方式来实现:
- 编译器标志:如优化等级、警告级别等。
- 定义宏:如定义 DEBUG 或 NDEBUG。
- 链接器选项:如链接静态库还是动态库。
- 构建类型:如 Debug、Release 等。
2. 设置构建类型
在 CMakeLists.txt
文件中,可以通过以下方式设置构建类型:
cmake
深色版本
1# 设置默认的构建类型
2if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
3 set(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None(CMAKE_CXX_FLAGS or CMAKE_C_FLAGS used) Debug Release RelWithDebInfo MinSizeRel.")
4 message(STATUS "Setting build type to '${CMAKE_BUILD_TYPE}'")
5endif()
这里 CMAKE_BUILD_TYPE
可以设置为以下几种类型:
- Debug:开启调试信息,关闭优化。
- Release:关闭调试信息,开启优化。
- RelWithDebInfo:开启调试信息和一定程度的优化。
- MinSizeRel:最小化可执行文件大小,开启优化。
3. 设置编译器标志
可以通过设置 CMAKE_C_FLAGS
和 CMAKE_CXX_FLAGS
来指定编译器的标志:
cmake
深色版本
1# 设置编译器标志
2if(CMAKE_BUILD_TYPE STREQUAL "Debug")
3 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall")
4 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall")
5elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
6 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O3 -DNDEBUG")
7 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3 -DNDEBUG")
8elseif(CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo")
9 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -O2 -g -DNDEBUG")
10 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -g -DNDEBUG")
11elseif(CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
12 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -DNDEBUG")
13 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os -DNDEBUG")
14endif()
4. 设置链接器标志
可以通过设置 CMAKE_EXE_LINKER_FLAGS
和 CMAKE_SHARED_LINKER_FLAGS
来指定链接器的标志:
cmake
深色版本
1# 设置链接器标志
2if(CMAKE_BUILD_TYPE STREQUAL "Debug")
3 set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-Map,${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map")
4 set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,-Map,${PROJECT_BINARY_DIR}/${PROJECT_NAME}.map")
5endif()
5. 多配置构建
在某些情况下,你可能希望在一个构建目录中支持多种构建配置。CMake 支持多配置模式,可以在生成时指定生成器的类型:
bash
深色版本
1# 生成 Visual Studio 项目文件,支持多种配置
2cmake -G "Visual Studio 16 2019" ..
对于 Ninja 或其他生成器,也可以使用多配置模式:
bash
深色版本
1# 生成 Ninja 文件,支持多种配置
2cmake -G "Ninja Multi-Config" ..
然后在构建时指定配置类型:
bash
深色版本
1# 构建 Debug 配置
2cmake --build . --config Debug
3
4# 构建 Release 配置
5cmake --build . --config Release
6. 使用 CMake 配置文件
CMake 还支持使用 .cmake
配置文件来管理构建选项。这种方式可以将配置信息与项目的 CMakeLists.txt
分离,使得配置更加灵活和可重用。
例如,可以创建一个 Options.cmake
文件来集中管理构建选项:
cmake
深色版本
1# Options.cmake
2if(NOT DEFINED CMAKE_CXX_STANDARD)
3 set(CMAKE_CXX_STANDARD 17)
4 set(CMAKE_CXX_STANDARD_REQUIRED True)
5endif()
6
7if(NOT DEFINED CMAKE_CXX_EXTENSIONS)
8 set(CMAKE_CXX_EXTENSIONS OFF)
9endif()
10
11if(NOT DEFINED CMAKE_BUILD_TYPE)
12 set(CMAKE_BUILD_TYPE Release)
13endif()
然后在 CMakeLists.txt
中包含此配置文件:
cmake
深色版本
1# CMakeLists.txt
2cmake_minimum_required(VERSION 3.10)
3project(HelloWorld)
4
5# 包含配置文件
6include(Options.cmake)
7
8add_executable(HelloWorld main.cpp)
总结
通过以上步骤,你可以有效地配置 CMake 的构建选项,包括设置构建类型、编译器标志、链接器标志等。合理的构建配置可以显著提高开发效率和软件质量。