cmake --version报错“command not found”并非未安装,而是macOS终端默认不识别GUI版CMake的命令行工具路径;根本原因是/Applications/CMake.app/Contents/bin未加入PATH环境变量,尤其在M1/M2/M3芯片上更明显。

终端输入 cmake --version 报错 command not found,不是你没装好,而是 macOS 默认不把 GUI 应用里的命令行工具纳入 PATH —— 尤其在 M1/M2/M3 芯片上,这个“隔离”更明显。三种方法都能解决,但适用场景和坑点完全不同。
Homebrew 安装:最快、最省心,但要注意芯片架构
这是绝大多数开发者首选,尤其适合刚起步或需要频繁更新 CMake 版本的场景。Homebrew 会自动处理路径、权限和依赖,但 Apple Silicon 用户必须确认用的是原生 ARM 版 Homebrew(路径为 /opt/homebrew/bin),否则可能因架构不匹配导致后续构建失败。
- 先验证 Homebrew 是否原生:
which brew输出应为/opt/homebrew/bin/brew;若为/usr/local/bin/brew,说明是 Rosetta 2 兼容版,建议重装 - 执行
brew install cmake,它会把cmake二进制文件放至/opt/homebrew/bin/cmake(M1/M2)或/usr/local/bin/cmake(Intel) - 无需手动改
~/.zshrc—— Homebrew 安装后已自动前置该路径到$PATH,但如果你之前手动改过 PATH,可能被覆盖,可运行echo $PATH | grep homebrew确认 - 验证:
cmake --version应直接输出版本号,比如cmake version 3.29.2
DMG 拖拽安装后配置 PATH:GUI 用户常用,但容易漏掉关键步骤
官网下载的 .dmg 文件本质是 CMake.app 应用包,命令行工具藏在 /Applications/CMake.app/Contents/bin/ 下。很多人拖完就以为完事了,结果终端找不到命令 —— 因为系统根本没被告知去这个目录找 cmake。
- 别跳过 CMake GUI 的 “How to Install For Command Line Use” 菜单(
Tools > How to Install For Command Line Use),它会弹出含完整命令的对话框,比手敲更可靠 - 手动配置时,必须根据 shell 类型选对配置文件:
echo $SHELL返回/bin/zsh就改~/.zshrc;返回/bin/bash就改~/.bash_profile - 写入的这行不能少:
export PATH="/Applications/CMake.app/Contents/bin:$PATH"—— 注意$PATH在右边,否则会覆盖系统原有路径 -
source ~/.zshrc后,用which cmake确认输出是/Applications/CMake.app/Contents/bin/cmake,再跑cmake --version
源码编译安装:可控性强,但容易卡在 bootstrap 阶段
适合需要定制编译选项(比如禁用 Qt GUI、启用 Ninja 支持)、调试 CMake 本身、或部署到无网络环境的场景。但它对开发环境要求更高,./bootstrap 这一步最容易失败。
- 必须先装 Xcode 命令行工具:
xcode-select --install,且要确保clang --version有输出,否则bootstrap会报 “no acceptable C compiler found” -
./bootstrap --prefix=/usr/local --parallel=$(sysctl -n hw.ncpu)是关键:不加--prefix默认装到/usr/local,而该路径已在系统 PATH 中;加了--parallel能加速编译,避免在 M 系列芯片上只用单核 - 编译前检查磁盘空间 ——
make过程中临时文件可能达 2GB+,/tmp分区不够会静默失败 - 最后一步
sudo make install成功后,cmake就在/usr/local/bin/cmake,无需额外 PATH 设置
真正容易被忽略的,是 PATH 冲突:比如你用 Homebrew 装了 CMake,又手动往 ~/.zshrc 里加了一条指向 DMG 版本的 PATH,结果 which cmake 显示的是旧版本,但 cmake --version 却报错 —— 这种路径叠加混乱在 Apple Silicon 上特别常见,建议每次安装后都用 which cmake 和 echo $PATH 双重验证实际生效的是哪个路径。



















