cmake介绍(二)--CMake 的构建和配置

目录

1. 构建配置概述

2. 设置构建类型

3. 设置编译器标志

4. 设置链接器标志

5. 多配置构建

6. 使用 CMake 配置文件

总结


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_FLAGSCMAKE_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_FLAGSCMAKE_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 的构建选项,包括设置构建类型、编译器标志、链接器标志等。合理的构建配置可以显著提高开发效率和软件质量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蘑菇二号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值