构建工具:Make vs CMake对比
定位差异
| 维度 | Make | CMake |
|---|---|---|
| 本质 | 通用构建工具(执行你写的规则) | 构建系统生成器(生成 Makefile/VS工程/Ninja文件) |
| 历史 | 1976,Unix 传统 | 2001,跨平台元构建工具 |
| 脚本语言 | 类 shell 的 make 规则 | CMakeLists.txt(类 Lisp 宏) |
| 跨平台 | 弱(依赖 GNU make、POSIX 工具链) | 强(一次编写,生成 Linux/macOS/Windows 构建文件) |
| 学习成本 | 低(但写复杂依赖很痛苦) | 中等(语法简单但概念多:target、property、generator) |
核心能力对比
| 能力 | Make | CMake |
|---|---|---|
| 增量构建 | 手维护依赖(或用生成脚本) | 自动处理 + 自动依赖扫描 |
| 依赖管理 | 手动/脚本解决(pkg-config) | find_package() 找系统包,ExternalProject/FetchContent 拉外部源码 |
| 第三方库 | 自己写链接规则 | find_library/Findxxx.cmake 模块,包配置(.pc、.cmake 文件) |
| 多配置 | 不原生支持 Release/Debug 切换 | 原生 |