news 2026/1/13 18:00:46

CMake 常用预设命令说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CMake 常用预设命令说明

CMake 常用预设命令说明

在使用 CMake 构建 C/C++ 项目时,我们通常需要在CMakeLists.txt文件中定义一些基础设置,以确保项目能够在不同平台和编译器下正确构建。本文将介绍一些最常用的预设命令,包括指定 CMake 版本、设置编译模式、显示构建信息以及指定 C++ 标准等。


一、指定 CMake 的最小版本

CMakeLists.txt的开头,推荐使用以下命令指定所需的最低 CMake 版本:

cmake_minimum_required(VERSION 3.16)

该命令的作用是告诉 CMake,当前项目至少需要 3.16 版本才能正确运行。
如果使用了某些新特性(例如target_link_libraries的现代用法),而版本太低,就会在配置阶段报错。


二、定义项目名称及语言

定义项目名称和使用的编程语言:

project(MyProject LANGUAGES CXX)
  • MyProject是项目名称;
  • LANGUAGES可以指定C,CXX,CUDA,Fortran等;
  • 声明了语言后,CMake 会自动为该语言加载相应的规则和工具链。

三、设置编译模式(构建类型)

CMake 通常支持以下几种构建类型:

  • Debug—— 含有调试信息,不进行优化;
  • Release—— 开启优化,去除调试信息;
  • RelWithDebInfo—— 优化同时保留部分调试信息;
  • MinSizeRel—— 优化为最小体积。

可以通过以下方式设置默认的构建类型:

set(CMAKE_BUILD_TYPE Release)

💡 注意:

  • 在多配置生成器(如 Visual Studio、Xcode)中,CMAKE_BUILD_TYPE无效,需要在生成时选择配置。
  • 对于单配置生成器(如 Makefile、Ninja),上述变量才生效。

四、控制编译输出与信息显示

在开发调试中,可能需要输出更多的构建信息。CMake 提供了以下命令来控制消息显示:

message(STATUS "当前构建类型: ${CMAKE_BUILD_TYPE}") message(WARNING "这是一个警告信息") message(FATAL_ERROR "出现致命错误,终止配置")

常用的消息等级包括:

  • STATUS—— 普通状态信息;
  • WARNING—— 发出警告,不中断;
  • FATAL_ERROR—— 输出错误并停止执行。

此外,可通过命令行参数控制详细程度,例如:

cmake -DCMAKE_VERBOSE_MAKEFILE=ON..

这会让构建系统在编译时显示具体的命令行。


五、指定 C++ 标准版本

在现代 CMake 中,推荐使用以下语法来指定所需的 C++ 标准版本:

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_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)

运行命令构建项目:

cmake -B build -S.cmake --build build

七、总结

功能常用命令示例
指定 CMake 版本cmake_minimum_requiredcmake_minimum_required(VERSION 3.20)
定义项目projectproject(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)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/24 1:36:29

x64dbg用户层调试核心要点一文说清

x64dbg 用户层调试实战精要:从断点到追踪的深度掌控 在逆向工程的世界里,静态分析能告诉你“代码长什么样”,而动态调试才能揭示“它到底做了什么”。随着现代软件普遍采用混淆、加壳、反调试等防护手段,仅靠 IDA 或 Ghidra 这类静…

作者头像 李华
网站建设 2026/1/4 5:18:07

负载均衡配置:多实例分摊请求压力

负载均衡配置:多实例分摊请求压力 在企业级 AI 应用逐渐从“能用”走向“好用”的今天,性能与稳定性成了决定用户体验的关键。以 anything-llm 为代表的本地化 RAG 平台,虽然功能强大——支持文档上传、私有知识问答、多模型切换——但一旦用…

作者头像 李华
网站建设 2025/12/24 1:33:58

基于Java+SpringBoot+SSM,SpringCloud企业网络主机IP地址管理系统(源码+LW+调试文档+讲解等)/企业网络IP管理/企业主机管理/企业网络管理系统/企业IP地址管理

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

作者头像 李华
网站建设 2026/1/12 4:44:52

在线电路仿真对比:LTspice Web与其他工具优劣比较

电路仿真工具怎么选?LTspice Web 深度实测,对比五款主流在线平台的真实表现 你有没有遇到过这样的场景:刚画好一个电源电路,想快速验证环路稳定性,却发现本地没装仿真软件;或者团队协作时,同事根…

作者头像 李华
网站建设 2025/12/24 1:33:29

Python 第三方库:darts(现代化时间序列建模与预测框架)

darts 是一个专门用于时间序列分析、建模与预测的 Python 库,提供统一而高层的 API,集成了统计模型(如 ARIMA)、机器学习模型(如 LightGBM)、深度学习模型(如 RNN、Transformer、N-BEATS、TCN 等…

作者头像 李华