CMake 常用预设命令说明
在使用 CMake 构建 C/C++ 项目时,我们通常需要在 CMakeLists.txt 文件中定义一些基础设置,以确保项目能够在不同平台和编译器下正确构建。本文将介绍一些最常用的预设命令,包括指定 CMake 版本、设置编译模式、显示构建信息以及指定 C++ 标准等。
一、指定 CMake 的最小版本
在 CMakeLists.txt 的开头,推荐使用以下命令指定所需的最低 CMake 版本:
cmake
cmake_minimum_required(VERSION 3.16)
该命令的作用是告诉 CMake,当前项目至少需要 3.16 版本才能正确运行。
如果使用了某些新特性(例如 target_link_libraries 的现代用法),而版本太低,就会在配置阶段报错。
二、定义项目名称及语言
定义项目名称和使用的编程语言:
cmake
project(MyProject LANGUAGES CXX)
MyProject是项目名称;LANGUAGES可以指定C,CXX,CUDA,Fortran等;- 声明了语言后,CMake 会自动为该语言加载相应的规则和工具链。
三、设置编译模式(构建类型)
CMake 通常支持以下几种构建类型:
Debug------ 含有调试信息,不进行优化;Release------ 开启优化,去除调试信息;RelWithDebInfo------ 优化同时保留部分调试信息;MinSizeRel------ 优化为最小体积。
可以通过以下方式设置默认的构建类型:
cmake
set(CMAKE_BUILD_TYPE Release)
💡 注意:
- 在多配置生成器(如 Visual Studio、Xcode)中,
CMAKE_BUILD_TYPE无效,需要在生成时选择配置。- 对于单配置生成器(如 Makefile、Ninja),上述变量才生效。
四、控制编译输出与信息显示
在开发调试中,可能需要输出更多的构建信息。CMake 提供了以下命令来控制消息显示:
cmake
message(STATUS "当前构建类型: ${CMAKE_BUILD_TYPE}")
message(WARNING "这是一个警告信息")
message(FATAL_ERROR "出现致命错误,终止配置")
常用的消息等级包括:
STATUS------ 普通状态信息;WARNING------ 发出警告,不中断;FATAL_ERROR------ 输出错误并停止执行。
此外,可通过命令行参数控制详细程度,例如:
bash
cmake -DCMAKE_VERBOSE_MAKEFILE=ON ..
这会让构建系统在编译时显示具体的命令行。
五、指定 C++ 标准版本
在现代 CMake 中,推荐使用以下语法来指定所需的 C++ 标准版本:
cmake
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
说明:
CMAKE_CXX_STANDARD指定 C++ 标准(如 11、14、17、20、23 等);CMAKE_CXX_STANDARD_REQUIRED表示版本必须满足或高于指定标准;CMAKE_CXX_EXTENSIONS OFF关闭编译器特有的扩展(如 GNU 扩展)。
六、典型的 CMakeLists.txt 示例
以下是一个简单示例,展示了本文中提到的关键命令:
cmake
cmake_minimum_required(VERSION 3.20)
project(MyProject LANGUAGES CXX)
# 设置构建类型
set(CMAKE_BUILD_TYPE Debug)
# 指定 C++17 标准
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
# 输出构建信息
message(STATUS "构建类型:${CMAKE_BUILD_TYPE}")
message(STATUS "C++标准版本:${CMAKE_CXX_STANDARD}")
# 添加源文件并生成可执行文件
add_executable(MyProject main.cpp)
运行命令构建项目:
bash
cmake -B build -S .
cmake --build build
七、总结
| 功能 | 常用命令 | 示例 |
|---|---|---|
| 指定 CMake 版本 | cmake_minimum_required |
cmake_minimum_required(VERSION 3.20) |
| 定义项目 | project |
project(MyApp LANGUAGES CXX) |
| 设置构建模式 | set(CMAKE_BUILD_TYPE ...) |
set(CMAKE_BUILD_TYPE Release) |
| 输出信息 | message(STATUS ...) |
message(STATUS "构建类型:${CMAKE_BUILD_TYPE}") |
| C++ 标准版本 | set(CMAKE_CXX_STANDARD ...) |
set(CMAKE_CXX_STANDARD 17) |