cmake与makefile的区别
| 维度 | CMake | Makefile |
|---|---|---|
| 本质 | 跨平台构建工具(生成器) | 编译规则脚本(依赖Make工具执行) |
| 核心作用 | 自动生成适配不同平台/编译器的Makefile(或VS工程、Ninja文件等) | 定义源码编译的依赖关系、编译命令,由Make解析执行 |
| 跨平台性 | 天然跨平台(Windows/Linux/macOS),语法统一 | 平台相关(如Windows需MinGW/MSYS,语法依赖Make工具版本) |
| 语法复杂度 | 高层抽象语法(如add_executable),易维护 | 底层脚本语法(需手动写依赖、命令),复杂项目易臃肿 |
| 适用场景 | 中大型/跨平台项目,适配多编译环境 | 小型Linux/Unix项目,需精准控制编译流程 |
| 执行逻辑 | 先执行cmake生成构建文件,再执行make编译 | 直接执行make解析Makefile完成编译 |
核心总结: CMake是「构建文件生成器」,通过跨平台语法生成适配不同环境的Makefile(或其他构建文件);Makefile是「编译规则文件」,直接定义编译依赖和命令,依赖Make工具执行,仅适配类Unix环境。
CMake 常用命令详解
本文整理了CMake构建过程中最常用的核心命令,涵盖版本设置、变量定义、项目配置、编译构建、安装部署等全流程,方便快速查阅和使用。
基础配置命令
1. 指定CMake最低版本
cmake_minimum_required(VERSION 3.1.3)
- 作用:限定构建当前项目所需的CMake最低版本,低于该版本会直接报错,确保语法和特性兼容。
- 示例:
cmake_minimum_required(VERSION 3.20)(推荐使用项目兼容的较高稳定版本)
2. 设置项目名称
project(project_name) # 扩展:指定项目语言和版本 project(project_name LANGUAGES C CXX VERSION 1.0.0)
- 作用:定义项目名称,同时会自动生成
PROJECT_NAME、PROJECT_VERSION等预定义变量。 - 参数说明:
LANGUAGES:指定项目支持的编程语言(如C、CXX/C++、Fortran等);VERSION:设置项目版本号。
变量操作命令
1. 普通变量定义与赋值
# 单值赋值
set(variable "content")
# 多值赋值(列表形式)
set(variable content1 content2 content3)
# 设置C++标准(核心常用)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 强制要求指定的C++标准,不兼容则报错
- 作用:定义自定义变量或修改CMake预定义变量,支持单值/多值(列表)赋值。

