cmake未找到或版本过低需先验证安装与path配置:windows用where/get-command,linux/macos用which/type;path未生效或版本陈旧(如ubuntu默认3.22、macos自带旧版)是主因,应优先通过官网二进制包或调整path顺序解决。

cmake --version 报错或找不到命令
说明 CMake 没有正确加入系统 PATH,或者根本没装。别急着重装,先确认是否真没装:
- Windows 上运行
where cmake(CMD)或Get-Command cmake(PowerShell),看有没有输出路径 - Linux/macOS 运行
which cmake或type cmake - 如果返回空,就是没装;如果返回路径但
cmake --version仍失败,大概率是 PATH 没生效(比如新终端没重载配置)
常见坑:Windows 安装时没勾选 Add CMake to the system PATH;Linux 用 apt install cmake 装的版本太旧(Ubuntu 22.04 默认是 3.22,而很多项目要求 ≥3.25);macOS 用 Homebrew 装完忘了 brew link cmake(尤其升级后断链)。
Windows 安装后 CMD 里能用,PowerShell 里不行
这是环境变量加载机制差异导致的——CMD 读注册表用户变量更“宽容”,PowerShell 更严格依赖当前会话的 $env:PATH。最直接的验证方式是:
- 在 PowerShell 中运行
$env:PATH -split ';' | Select-String cmake,看有没有匹配项 - 如果没结果,说明 PATH 没生效。重启 PowerShell 是最稳妥的解决方式(不是关窗口再开,而是彻底退出进程后重启)
- 若仍不行,检查安装时选的是
for all users还是for current user:前者写入系统环境变量,后者只写用户变量;管理员权限安装却选了“current user”,普通 PowerShell 就可能读不到
Linux 上 apt 安装的 cmake 版本太低
Ubuntu/Debian 官方源的 cmake 包长期滞后(如 24.04 仍为 3.28.x),而现代 CMakeLists.txt 常用 cmake_minimum_required(VERSION 3.25) 直接报错。绕过包管理器是最省事的方案:
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- 去 cmake.org/download 下载最新
cmake-*-linux-x86_64.tar.gz - 解压后把
cmake-*/bin加进 PATH,例如:export PATH="/path/to/cmake-3.31.8-linux-x86_64/bin:$PATH"(写进~/.bashrc或~/.zshrc) - 注意:不要用
sudo cp -r覆盖/usr/bin/cmake,容易破坏系统包依赖;优先走 PATH 前置
不用源码编译(./bootstrap && make && sudo make install),除非你明确需要调试 CMake 自身或定制构建选项——对绝大多数用户来说,官方二进制包完全够用且更稳定。
macOS 上 brew install cmake 后 cmake --version 显示旧版本
Homebrew 安装后,cmake 可能被系统自带的 /usr/bin/cmake(macOS 自带,版本极老)覆盖。原因通常是:
-
brew install cmake成功,但brew link cmake没自动执行(某些 Brew 配置下会跳过) - PATH 中
/usr/bin排在/opt/homebrew/bin(Apple Silicon)或/usr/local/bin(Intel)前面
验证顺序:echo $PATH 看 /opt/homebrew/bin 是否在 /usr/bin 左侧;修复方法:在 shell 配置文件里确保 export PATH="/opt/homebrew/bin:$PATH"(M1/M2)或 export PATH="/usr/local/bin:$PATH"(Intel)。改完记得 source ~/.zshrc。
真正麻烦的不是安装动作本身,而是 PATH 的隐式优先级和 shell 会话的变量继承关系——它不报错,只静默用错版本,等 cmake .. 报 CMake Error at CMakeLists.txt:1 (cmake_minimum_required): 才发现,已经浪费半小时。










