必须运行 cmake --version 确认真实版本,因系统默认CMake常过旧(如CentOS 7仅2.8、Ubuntu 18.04仅3.10),且多版本共存时PATH顺序决定生效版本。

怎么确认系统里没装 CMake 或版本太低
很多报错其实就卡在这一步:你以为装了,其实没装;或者装了但 cmake --version 显示的是 3.10,而项目要求 3.16+。Ubuntu/Debian 默认源里的 cmake 包往往老旧,CentOS 7 自带的甚至只有 2.8。别信 which cmake 的结果,一定要跑 cmake --version 看真实版本。
- 检查是否可用:
cmake --version,如果报command not found,说明真没装 - 已安装但版本不够?常见于 Ubuntu 20.04(自带 3.16.3)但项目要 3.20+,或 CentOS 7(自带 2.8.12)
-
whereis cmake和type -a cmake能帮你发现是不是有多个版本混着用,比如手动编译的和包管理器装的冲突
Ubuntu/Debian 直接用 apt 安装够不够用
够用的前提是你的发行版比较新,且项目对 CMake 版本不敏感。老系统(如 Ubuntu 18.04、Debian 10)apt 源里的 cmake 是 3.10 或 3.13,编译较新的 C++ 项目(比如用 find_package(Threads REQUIRED) 或 FetchContent)容易失败。
- 新版 Ubuntu(22.04+)可直接
sudo apt update && sudo apt install cmake,版本通常 ≥ 3.22 - 老系统想省事,加官方预编译仓库:
sudo apt install software-properties-common && sudo add-apt-repository "deb [arch=amd64] https://apt.kitware.com/ $(lsb_release -cs) main" && sudo apt update && sudo apt install cmake - 别装
cmake-data或cmake-curses-gui这类分拆包——它们不提供cmake可执行文件,装了也白装
CentOS/RHEL 怎么绕过 2.8 版本陷阱
CentOS 7 自带的 cmake 是 2.8.12,连 target_compile_features 都不支持,强行用会报类似 Unknown CMake command "target_compile_features" 的错误。yum 源里也没有高版本,必须换方式。
- 最稳的是下载官方二进制包:
wget https://github.com/Kitware/CMake/releases/download/v3.28.1/cmake-3.28.1-linux-x86_64.tar.gz,解压后把bin/加进$PATH(比如写进~/.bashrc的export PATH="/path/to/cmake-3.28.1-linux-x86_64/bin:$PATH") - 别用
epel源里的cmake3——它只是个兼容包名,实际还是 2.8 或 3.6,不可靠 - 手动编译安装?除非你真需要调试 CMake 本身,否则纯属增加出错概率:依赖
ncurses-devel、openssl-devel,还可能卡在Bootstrap failed
验证安装是否真正生效
改完 PATH 或装完包后,别急着去编译项目。很多人在这里翻车:终端没重载配置、Shell 类型不对(比如用了 zsh 却改了 .bashrc)、或者 cmake 被 alias 覆盖了。
- 新开一个终端,运行
which cmake,确认路径指向你刚装的位置(比如/opt/cmake-3.28.1/bin/cmake) - 运行
cmake --version和cmake -E echo "test"(-E是内置命令,能快速验证基础功能) - 如果项目里仍报错,检查
CMAKE_ROOT环境变量有没有被误设——它会干扰模块查找,一般不需要手动设
最容易被忽略的是 shell 配置文件的加载时机和多版本共存时的优先级。PATH 里谁在前,谁就生效,哪怕你 sudo make install 到 /usr/local/bin,只要 /usr/bin 在它前面,系统还是调旧版。











