CMAKE_MAKE_PROGRAM未设置的根本原因是CMake找不到ninja.exe,需确认其是否在PATH中或手动指定路径;Windows推荐放System32或添加系统级PATH并重启终端,macOS需检查Homebrew路径并导出PATH,Android NDK则需通过工具链文件或DCMAKE_MAKE_PROGRAM指定。

cmake -G "Ninja" 报错 CMAKE_MAKE_PROGRAM is not set
这是 Windows 上最常见的情形:CMake 知道你要用 Ninja,但压根没找到 ninja.exe。错误不是 Ninja 没装,而是它不在 CMake 的搜索路径里。
验证是否真装了:ninja --version 在终端里执行。如果报“不是内部或外部命令”,说明确实没进 PATH;如果能输出版本号,问题就出在 CMake 没读到这个 PATH(比如你在 VS Code 终端里装的,但 CMake Tools 插件启动的是干净环境)。
- Windows 下推荐把
ninja.exe放到C:\Windows\System32(免配 PATH,所有进程都能看到) - 或者手动把 Ninja 安装目录(如
C:\ninja或C:\Qt\Tools\Ninja)加进系统级PATH,**重启终端/VS Code 才生效** - 别只改用户 PATH——某些 IDE(如 Qt Creator、CLion)默认读系统 PATH,不读用户 PATH
VS Code 中 CMake Tools 选了 Ninja 却找不到编译器
这其实是连锁反应:CMake 找不到 ninja.exe → 构建流程中断 → 编译器检测步骤根本没跑 → 后续报 CMAKE_CXX_COMPILER not set。很多人误以为是编译器问题,其实根子还在 Ninja。
检查 VS Code 状态栏右下角:[Configure failed] 或 [Ready][xxx: Debug][Unknown] —— 如果没显示 Ninja,说明生成器根本没生效。
组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。
- 按
Ctrl+Shift+P→ 输入CMake: Select a Kit,选带 “Visual Studio” 或 “MinGW” 的 kit,**不要只选编译器不选 kit** - 再执行
CMake: Configure,弹窗里确认 Generator 是Ninja(不是Ninja Multi-Config,后者在旧版 CMake 上可能失败) - 如果仍失败,在项目根目录建
build文件夹,终端进该目录手动运行:cmake -S .. -B . -G "Ninja" -DCMAKE_BUILD_TYPE=Debug
Linux/macOS 下 ninja 命令可用但 CMake 还是报错
典型于 macOS Homebrew 安装的 Ninja:命令行能用 ninja --version,但 CMake 就是不认。这是因为 Homebrew 默认把 ninja 装在 /opt/homebrew/bin/ninja(Apple Silicon)或 /usr/local/bin/ninja(Intel),而某些 CMake 版本(尤其是通过 dmg 或官网 pkg 安装的)会忽略非标准路径。
- 先查 Ninja 实际位置:
which ninja - 强制指定路径:
cmake -S . -B build -G "Ninja" -DCMAKE_MAKE_PROGRAM=/opt/homebrew/bin/ninja - 更一劳永逸:把
export PATH="/opt/homebrew/bin:$PATH"加进~/.zshrc,然后source ~/.zshrc - 注意:CMake 3.20+ 对 Ninja 路径敏感,
ninja和ninja-build是两个不同包名(Debian/Ubuntu 用后者),确保装的是ninja
Android NDK 或交叉编译时 Ninja 找不到
这类场景下,CMake 不是从你本地 PATH 查 Ninja,而是从 CMAKE_TOOLCHAIN_FILE 指定的工具链文件里读构建工具路径。即使你本地有 ninja.exe,NDK 工具链可能硬编码了 make 或要求特定 Ninja 版本。
- 检查工具链文件里有没有类似
set(CMAKE_MAKE_PROGRAM "${CMAKE_CURRENT_LIST_DIR}/../prebuilt/windows-x86_64/ninja.exe")的行 - NDK r23+ 自带 Ninja,路径通常是
$ANDROID_NDK_HOME/prebuilt/windows-x86_64/ninja.exe(Win)或darwin-x86_64/ninja(macOS) - 如果工具链没设,手动传参:
cmake -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_HOME/prebuilt/windows-x86_64/ninja.exe ...
真正卡住人的往往不是 Ninja 没装,而是 CMake 启动时那个瞬间的环境快照——它看不到你刚在另一个终端里 export 的 PATH,也读不到 IDE 配置里没生效的变量。动手前先确认 ninja --version 和 cmake -E echo $PATH 输出一致,比反复重装 Ninja 有效得多。

















