CMake 常用预设命令说明

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)
相关推荐
D.不吃西红柿1 天前
CPM.cmake轻量级包管理器
c++·cmake·cpm.cmake
十五年专注C++开发15 天前
CMake基础: 在release模式下生成调试信息的方法
linux·c++·windows·cmake·跨平台构建
kimicsdn16 天前
opentelemetry-demo currency cpp 项目编译流程分享
c++·cmake·libprotobuf-dev
十五年专注C++开发18 天前
CMake进阶:模块模式示例FindOpenCL.cmake详解
开发语言·c++·cmake·跨平台编译
番茄灭世神19 天前
基于VScode搭建GD32开发环境
arm开发·vscode·单片机·cmake·gd32
l1t21 天前
在arm64 Linux系统上编译tdoku-lib的问题和解决
linux·运维·服务器·c语言·cmake
番茄灭世神21 天前
基于VScode的C/C++环境搭建
vscode·cmake·gcc·c\c++·llvm·工具链搭建
Two_brushes.22 天前
Cmake中寻库文件的路径
开发语言·c++·cmake
十五年专注C++开发22 天前
CMake基础:foreach详解
linux·c++·windows·cmake·跨平台编译
wysaid22 天前
一个 VS Code 插件 (cc-format):让你的 CMake 代码拥有 CLion 般的格式化体验
cmake