首页 >> 甄选问答 >

问cmake 是干什么的 构建工具详解

2026-11-04 19:33:56

答

cmake 是一款跨平台的构建系统生成工具,它本身不是编译器,也不直接编译代码,核心作用是读取项目里的 CMakeLists.txt 配置文件,根据当前操作系统编译器环境,自动生成对应的原生构建文件,比如 Windows 生成 Visual Studio 工程文件,Linux 生成 Makefile,macOS 可以生成 Xcode 工程或者 Makefile,程序员只需要写一份 cmake 配置,就可以在不同系统完成项目编译,解决传统 Makefile 跨平台兼容性差,不同编译器配置不统一的痛点,C C++ 开源项目几乎普遍使用 cmake,也是嵌入式机器人计算机视觉这类 C++ 项目标配构建工具。

核心定位对照表

项目详细说明
全称Cross Platform Make
类型构建生成器,非编译器
输入文件CMakeLists.txt
输出文件Makefile VS 工程 Xcode 工程等
主要语言C C++ 项目为主
核心优势跨平台 可扩展 支持依赖管理

深度工作原理

cmake 整个流程分为两个阶段,第一阶段是配置阶段,cmake 读取 CMakeLists.txt,检测系统环境,查找依赖库,判断编译器版本,收集源文件,生成内部缓存信息,第二阶段是生成阶段,按照选定的生成器,输出对应的原生构建文件,第三阶段才是真正编译,调用 make 或者 msbuild 执行编译链接,也就是 cmake 只负责生成构建脚本,真正编译动作还是交给 gcc clang msvc 这些编译器完成。

基础常用指令清单

cmake_minimum_required 设置 cmake 最低版本

project 声明项目名称和支持语言

add_executable 添加可执行程序目标

add_library 添加库目标 静态库或者动态库

target_link_libraries 给目标链接依赖库

include_directories 添加头文件搜索路径

find_package 查找外部依赖包

set 定义变量

基础使用步骤

第一步 在项目根目录新建 CMakeLists.txt,编写项目配置代码

第二步 创建 build 独立构建目录,推荐外部构建,避免源码目录被编译文件污染

第三步 在 build 目录执行 cmake 命令,指定源码路径,选择生成器

第四步 执行构建命令,比如 make,或者打开 VS 工程点击编译

第五步 编译完成之后得到可执行文件或者库文件

和同类工具对比

工具特点对比 cmake
MakeLinux 原生,跨平台差cmake 可以生成 Makefile,跨平台能力更强
Autotools老牌 GNU 项目工具,配置繁琐cmake 语法更简洁,现代项目更偏好 cmake
Meson新一代构建系统cmake 生态成熟,第三方库支持更多
Bazel谷歌推出,支持多语言cmake 专注 C C++,学习门槛更低

常见使用场景清单

C C++ 开源库编译,比如 OpenCV PCL Eigen

嵌入式交叉编译项目,指定交叉编译工具链

多模块大型项目,管理子目录子工程

需要同时支持 Windows Linux Mac 三端的软件项目

常见误区

误区 1 cmake 就是编译器,可以直接把 cpp 变成 exe,实际它只生成构建文件

误区 2 一份 CMakeLists.txt 不需要任何修改,所有系统都能完美编译,实际跨平台的时候依然要处理平台判断宏,依赖差异

误区 3 cmake 只能用于 C C++,它也支持 Fortran,但是主流还是 C C++ 项目

整体总结,cmake 是跨平台构建生成工具,通过一份 CMakeLists.txt 自动生成各平台原生构建脚本,简化多平台 C C++ 项目编译流程,是现代 C++ 开发必备工具,理解它生成构建文件而不是直接编译这个核心特点,就掌握了 cmake 是干什么的核心逻辑。

【常见问题】

问题 1 cmake 是干什么的 它可以直接编译 cpp 代码吗

回答 1 cmake 是干什么的这个知识点里,cmake 本身不能直接编译 cpp 代码,它只负责生成 Makefile 或者 VS 工程,真正编译由 gcc msvc 这类编译器完成。

问题 2 cmake 是干什么的 为什么开源 C++ 项目都要用 cmake

回答 1 cmake 是干什么的核心优势就是跨平台,一份 CMakeLists.txt 可以适配 Windows Linux Mac,统一项目构建流程,所以现代 C++ 开源项目普遍选用 cmake。

问题 3 cmake 是干什么的 和 make 是什么关系

回答 1 cmake 是干什么的里面,cmake 可以生成 Makefile,make 是执行 Makefile 进行编译的工具,cmake 属于上层构建生成器,make 是底层执行工具。

【免责申明】

本文内容为开发工具科普,不同版本 cmake 语法和支持特性会随版本迭代更新,仅作为编程学习参考,不代表所有版本命令完全通用。

 

相关阅读

最新文章