第1章:环境搭建——Windows/Linux/macOS下安装CMake
说实话,我见过太多人卡在第一步了。
明明代码写得挺好,一编译就报错。最后发现——CMake版本不对,或者压根没装对。我自己刚入行那会儿也踩过这个坑,折腾了一下午才发现是环境变量没配好。所以这一章,咱们先把地基打牢。
1.1 为什么需要CMake?
先问个问题:你写了一个跨平台项目,想在Windows上跑,也在Linux上跑,还在macOS上跑。你打算怎么构建?
用Visual Studio的.sln?Linux上打不开。用Makefile?Windows上又得装MinGW。每个平台写一套构建脚本?那维护成本就上天了。
CMake就是来解决这个问题的。它不直接编译代码,而是生成对应平台的构建文件。说白了,它是一个「构建系统的生成器」。你写一份CMakeLists.txt,它就能给你变出.sln、Makefile、Xcode项目……
核心思想:Write once, build anywhere.
1.2 各平台安装方式
我个人习惯用包管理器来装,干净利落。当然,去官网下载安装包也行,看你自己。
Windows
Windows下有两种主流方式:
- 官方安装包:去
cmake.org/download下载 .msi 文件,双击安装。安装时记得勾选「Add CMake to system PATH」。 - 通过Chocolatey:如果你装了Chocolatey,一行命令搞定:
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=User'
我曾经遇到过:装完CMake后,在命令行里敲 cmake --version 提示找不到命令。原因就是没勾选添加到PATH。解决办法:手动把 C:\Program Files\CMake\bin 加到系统环境变量里。
Linux
Linux下最简单,用包管理器:
- Ubuntu/Debian:
sudo apt install cmake - CentOS/RHEL:
sudo yum install cmake - Fedora:
sudo dnf install cmake
不过要注意,apt里的CMake版本可能比较老。如果你需要最新版,我建议去官网下载源码编译,或者用Kitware的官方APT仓库。
小技巧:用 apt list --upgradable 可以查看是否有新版本。我一般每季度检查一次,避免因为CMake版本太低导致新语法不支持。
macOS
macOS用户推荐用Homebrew:
brew install cmake
当然,你也可以下载 .dmg 安装包。但我个人觉得Homebrew更省心,升级也方便:brew upgrade cmake。
1.3 验证安装
装完之后,别急着写代码。先验证一下:
cmake --version
你应该会看到类似这样的输出:
cmake version 3.28.1
CMake suite maintained and supported by Kitware (kitware.com/cmake).
如果看到版本号,恭喜你,环境搭好了。
嗯,这里要注意:不同版本的CMake支持的语法略有差异。比如3.10之前不支持 target_link_libraries 的 PRIVATE 关键字。所以尽量用新版本,我建议至少3.16以上。
1.4 第一个Hello CMake项目
光说不练假把式。咱们来写一个真正的CMake项目。
项目结构
hello_cmake/
├── CMakeLists.txt
└── main.cpp
main.cpp
#include <iostream>
int main() {
std::cout << "Hello, CMake!" << std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(HelloCMake VERSION 1.0.0 LANGUAGES CXX)
add_executable(hello_cmake main.cpp)
解释一下这三行:
cmake_minimum_required:指定最低CMake版本。低于这个版本会报错。project:定义项目名称、版本、语言。这里我们只用C++。add_executable:告诉CMake,我们要生成一个可执行文件,源文件是main.cpp。
构建与运行
在项目根目录下执行:
mkdir build
cd build
cmake ..
cmake --build .
然后运行:
./hello_cmake # Linux/macOS
hello_cmake.exe # Windows
你应该会看到:
Hello, CMake!
为什么先建build目录?这叫「外部构建」。所有生成的文件都放在build里,不会污染源码目录。我见过有人直接在源码目录里跑cmake,结果一堆临时文件混在一起,看着就头疼。
1.5 知识体系总览
下面这张图,帮你把本章的核心逻辑串起来:
1.6 避坑指南
最后,分享几个我踩过的坑:
- 路径中有中文或空格:CMake对中文路径支持不好。我建议项目目录全用英文,不要有空格。
- 忘记建build目录:直接在源码目录里跑cmake,然后生成的文件和源码混在一起。别问我怎么知道的。
- Windows下用MinGW:如果你用MinGW,记得指定生成器:
cmake -G "MinGW Makefiles" ..。不然默认生成Visual Studio项目,MinGW编译不了。 - 版本太老:有些老旧教程还在用CMake 2.x的语法。现在都3.x了,很多新特性用起来更爽。比如
target_include_directories比include_directories优雅得多。
我的建议:初学者先别急着搞复杂项目。把Hello CMake跑通,理解「外部构建」和「内部构建」的区别,后面学起来会顺畅很多。
好了,环境搭好了,第一个项目也跑起来了。接下来你就可以放心地往CMakeLists.txt里加更多内容了。记住,构建系统是工具,不是目的。别在工具上花太多时间,够用就行。
公众号:蓝海资料掘金营,微信deep3321