2、CMake安装:在Linux(Ubuntu/CentOS)和Windows上安装CMake,验证安装

好,咱们正式开始动手了。这一章我带你把CMake装到机器上。别小看这一步,我见过太多人卡在安装环节——版本不对、路径混乱、权限不够……说白了,环境没搭好,后面全是坑。

我个人习惯是:先确认系统,再选安装方式,最后做验证。三步走,稳得很。

2.1 在Ubuntu上安装CMake

Ubuntu用户最幸福,apt一键搞定。但这里有个细节——apt仓库里的版本往往偏旧。我在项目中遇到过,用apt装了个3.16,结果同事的CMakeLists.txt里用了3.20的语法,编译直接报错。你说冤不冤?

2.1.1 使用apt安装(适合快速上手)

# 更新包索引
sudo apt update

# 安装CMake
sudo apt install cmake

# 验证版本
cmake --version

嗯,这里要注意:如果你只是做简单练习,apt版本够用。但做交叉编译,我建议你往下看。

2.1.2 从源码安装(推荐,版本可控)

为什么要从源码装?因为交叉编译经常需要特定版本的CMake,比如某些工具链只支持3.20以上。我曾经被这个坑过——折腾了两天,最后发现是CMake版本太低,不认识新的工具链文件语法。

# 1. 卸载旧版本(如果有)
sudo apt remove cmake

# 2. 下载源码(以3.28.0为例)
wget https://github.com/Kitware/CMake/releases/download/v3.28.0/cmake-3.28.0.tar.gz

# 3. 解压
tar -zxvf cmake-3.28.0.tar.gz
cd cmake-3.28.0

# 4. 配置、编译、安装
./bootstrap
make -j$(nproc)
sudo make install

# 5. 验证
cmake --version
我的小技巧: 别用 sudo make install 覆盖系统路径。我习惯装到 /opt/cmake-3.28,然后软链接到 /usr/local/bin。这样切换版本时,改个链接就行。

2.2 在CentOS上安装CMake

CentOS用户要注意,yum仓库里的CMake版本更老。我记得CentOS 7默认还是3.6.x,那都是2016年的东西了。你想想看,现在都2025年了,差了多少个版本?

2.2.1 使用yum安装

# 安装EPEL源(Extra Packages for Enterprise Linux)
sudo yum install epel-release

# 安装CMake
sudo yum install cmake

# 验证
cmake --version
警告: CentOS 7的EPEL源里CMake最高到3.20左右。如果你需要更新的版本,老老实实从源码装吧。

2.2.2 从源码安装(CentOS同样适用)

步骤和Ubuntu一样,只是依赖包名不同:

# 安装编译依赖
sudo yum install gcc gcc-c++ make openssl-devel

# 然后执行和Ubuntu相同的源码安装步骤
# 下载、解压、bootstrap、make、make install

2.3 在Windows上安装CMake

Windows下安装最简单,但有个坑——环境变量。我帮同事排查过,装完CMake后命令行敲不了,就是因为安装时没勾选「Add CMake to system PATH」。

2.3.1 使用安装包安装

  1. 访问 https://cmake.org/download/
  2. 下载 cmake-3.28.0-windows-x86_64.msi
  3. 双击安装,务必勾选「Add CMake to the system PATH for all users」
  4. 安装完成后,打开命令提示符验证:
cmake --version
重要: 如果你忘了勾选PATH,可以手动添加:
右键「此电脑」→ 属性 → 高级系统设置 → 环境变量 → 在Path中添加 C:\Program Files\CMake\bin

2.3.2 使用包管理器安装(推荐)

如果你用Windows开发,我强烈建议装个包管理器。用scoop或chocolatey,一行命令搞定:

# 使用scoop
scoop install cmake

# 使用chocolatey
choco install cmake

这样做的好处是:升级方便,卸载干净,不会污染系统。我个人现在Windows开发全用scoop管理工具链。

2.4 验证安装是否成功

装完了,怎么知道好不好使?我一般做三件事:

2.4.1 检查版本

cmake --version

输出应该类似:

cmake version 3.28.0
CMake suite maintained and supported by Kitware (kitware.com/cmake).

2.4.2 运行一个最小示例

创建一个测试目录,写个最简单的CMakeLists.txt:

# 创建目录
mkdir cmake_test
cd cmake_test

# 创建CMakeLists.txt
echo "cmake_minimum_required(VERSION 3.10)
project(HelloWorld)
add_executable(hello main.cpp)" > CMakeLists.txt

# 创建main.cpp
echo '#include <iostream>
int main() {
    std::cout << "CMake works!" << std::endl;
    return 0;
}' > main.cpp

# 构建
mkdir build && cd build
cmake ..
make
./hello

如果输出 CMake works!,恭喜你,环境搭好了。

2.4.3 检查生成器

交叉编译时,生成器很重要。用这个命令看看你的CMake支持哪些:

cmake --help

你会看到类似这样的列表:

生成器名称 适用平台
Unix Makefiles Linux/macOS
Ninja 跨平台(推荐)
Visual Studio 17 2022 Windows
MinGW Makefiles Windows (MinGW)
我的建议: 如果你做交叉编译,优先用Ninja生成器。它比Make快很多,而且跨平台表现一致。我在嵌入式项目里全换成了Ninja,编译时间缩短了30%以上。

2.5 常见问题与避坑

  • 「找不到cmake命令」:多半是环境变量没配好。检查PATH里有没有CMake的bin目录。
  • 「版本太旧」:apt/yum装的版本不够新。用源码安装或者添加Kitware的官方APT仓库。
  • 「编译报错:找不到库」:源码安装时缺少依赖。Ubuntu需要libssl-dev,CentOS需要openssl-devel。

我曾经在CentOS上折腾了一下午,就是因为没装openssl-devel,bootstrap阶段一直报错。后来查了日志才发现——嗯,这种基础依赖问题,遇过一次就记住了。

好,这一章就到这里。CMake装好了,下一章我们开始聊「怎么用它来管理项目」。到时候我会带你写第一个真正的CMakeLists.txt,把交叉编译的架子搭起来。