如果着急下载的话,可以在这里下载:CMake 最新版安装包下载(来自官网)
如果你写过 C/C++ 项目,大概率遇到过这样的场景,代码在 Linux 上能编译,换到 Windows 就报错,或者 clone 了一个开源项目,面对一堆 Makefile 不知道从哪下手。
跨平台编译长期困扰着 C/C++ 开发者,CMake 的出现就是为了解决该问题。
CMake 是一款强大的跨平台构建工具,通过一份 CMakeLists.txt 配置文件,自动生成适用于不同平台和编译器的构建文件,让跨平台编译不再是一件头痛的事。
相比市面上同类型的构建工具( Make、Ninja、Meson、Bazel、Gradle 等),CMake 的优势在于:
- 跨平台支持最好:一套 CMakeLists.txt 配置可以在 Windows、Linux、macOS 上生成对应的构建文件,而 Make 主要在 Linux 上使用,Meson 对 Windows 的支持也不如 CMake 成熟;
- 生态最完善:几乎所有主流 C/C++ 开源项目(OpenCV、TensorFlow、LLVM 等)都使用 CMake 构建,学会 CMake 意味着你能看懂和参与大量开源项目;
- 与 IDE 集成度最高:CLion、Visual Studio、VS Code 等主流 IDE 都原生支持 CMake 项目,一键导入即可开始开发。
本文将从下载安装开始,一步步带你上手 CMake 的基本使用,帮你快速迈过构建工具的门槛。
CMake 下载
CMake 4.4.3 发布版官网最新安装包下载:https://pan.quark.cn/s/9fa6403b6259
为了方便下载安装,本文附带了不同系统和版本的安装包,可以按需要下载使用:
- cmake-4.4.3-windows-x86_64.msi:Windows 64 位系统,绝大多数电脑选择这个。
- cmake-4.4.3-windows-arm64.msi:Windows ARM64 系统,适用于 Surface Pro X 等 ARM 架构 Windows 设备。
- cmake-4.4.3-windows-i386.msi:Windows 32 位系统,适用于较旧的 32 位电脑。
- cmake-4.4.3-macos-universal.dmg:macOS 通用版(macOS 12 及以上),同时支持 Apple 芯片和 Intel 芯片。
- cmake-4.4.3-macos10.10-universal.dmg:macOS 通用版(macOS 10.10 及以上),适用于较旧版本的 macOS 系统。
- cmake-4.4.3-linux-x86_64.sh:Linux 64位系统,适用于大多数 Linux 发行版。
- cmake-4.4.3-linux-aarch64.sh:Linux ARM64 系统,适用于树莓派等 ARM 架构的设备。
MinGW 下载(必须)
CMake 只是构建工具,使用CMake编译C/C++项目需要编译器,这里推荐使用 MinGW。
我写过一篇 MinGW 的安装使用教程,本文就不详细讲解了。如果不会的话,可以查看:【Mingw-w64】MinGW下载安装与使用教程(C/C++ 编译器,附安装包)
CMake 安装
本文以 Windows 64 位系统为例,以下安装步骤基于“cmake-4.4.3-windows-x86_64.msi”。
1) 双击“cmake-4.4.3-windows-x86_64.msi”:
2) 点击“Next”:
3) 勾选“I accept...”,点击“Next”:
4) 如果需要创建 CMake 桌面快捷方式,勾选“Add CMake shortcut to the Desktop”,点击“Next”:
5) CMake 默认安装到 C 盘,为避免占用系统盘空间,点击 “Change...” 更换安装路径:
6) 选择 D 盘(或其他非系统盘),点击图片中第二步新建一个文件夹,命名为 "CMake"(建议用英文),确认路径后点击 "OK":
6) 点击“Next”:
7) 点击“Install”,这一步需要管理员权限:
8) 点击“Finish”安装完成:
CMake 打开方式
1) 验证 CMake 是否安装成功:
按 Win + R,输入 cmd,回车打开,输入命令:cmake --version 。如果可以返回下图内容,代表安装成功:
2) 如果创建了快捷方式,双击“CMake(cmake-gui)”:
3) 如果没安装快捷方式,可以在开始菜单搜索并打开 CMake:
打开 CMake-GUI,看到下图所示界面,代表安装成功:
CMake 使用
下面用一个简单的 C++ 项目演示 CMake 的基本用法。
1) 新建一个项目文件夹(我这里创建项目的名字是“project”),在里面创建两个文件:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.21) project(HelloCMake) add_executable(hello main.cpp)
main.cpp:
int main() { std::cout << "Hello, CMake!" << std::endl; return 0; }
2) 在如图所示的地方,输入 cmd,回车:
3) 使用命令创建 build 目录并执行 cmake 配置:
mkdir build cd build cmake -G "MinGW Makefiles" ..
这里解释一下上面几行命令的意义:
- mkdir build:创建 build 构建目录,CMake 产生的全部中间文件都放在该目录,实现源码与构建文件分离,不会污染源码文件夹。
- cd build:进入 build 构建目录。
- cmake -G "MinGW Makefiles" ..:执行 CMake 配置生成。.. 表示 CMakeLists.txt 在上一级源码目录;‑G "MinGW Makefiles" 指定生成 MinGW 适用的 Makefile。该命令会自动检测系统编译器环境,控制台会输出 CMake 版本、编译器等相关信息。
4) 编译项目:mingw32-make
5) 编译成功后,在 build 目录执行:.\hello.exe,看到输出 Hello, CMake! 就说明整个流程跑通了:
常见问题与解决方案
运行 cmake 命令提示找不到
- 编译器确认是否已安装 Visual Studio 或 MinGW 等编译工具,CMake 本身只是构建工具,需要配合编译器使用。
- 可以运行 cmake --help 查看当前支持的生成器列表,确认编译器是否正确安装。
CMakeLists.txt 配置后编译报错找不到
- 头文件在 CMakeLists.txt 中使用 include_directories 命令添加头文件路径,或者使用 target_include_directories 为特定目标指定头文件目录。
- 注意路径要写对,相对路径是相对于 CMakeLists.txt 所在目录的。
生成的项目文件版本不对
- 比如想生成 VS 2022 的项目却生成了 VS 2019 的,可以在运行 cmake 时指定 -G 参数,例如 cmake -G "Visual Studio 17 2022"来指定生成器版本。
- 运行 cmake -G 可以查看所有可用的生成器。
添加了源文件但编译时没有包含进去
- 修改 CMakeLists.txt 后需要重新运行 cmake 命令来更新构建文件,每次新增或删除源文件都要记得重新执行 cmake。
- 建议在 CMakeLists.txt 中使用 file(GLOB ...) 来收集源文件,可以避免手动维护文件列表。
总结
总的来说,CMake 是 C/C++ 开发中不可或缺的构建工具,学会使用 CMake 可以大大提高项目的可移植性和构建效率。尤其对于跨平台项目来说,CMake 几乎是标配。