cmake报“cmake_make_program is not set”本质是未找到make或ninja等构建工具,主因有三:系统未安装、path未包含其路径、windows下mingw用mingw32-make.exe而cmake默认认make.exe;解决需装工具、配path、复制重命名或传参指定路径。

CMake 报 CMAKE_MAKE_PROGRAM is not set 或类似提示(比如 CMake was unable to find a build program corresponding to "MinGW Makefiles"),本质不是 CMake “坏了”,而是它压根没找到能干活的构建工具——make、ninja 这类程序根本不在它视线范围内。
为什么CMake找不到make命令
常见现象包括:make 在终端里能运行,但 CMake 配置时仍报错;或 which make 有输出,CMake 却坚持说没这玩意儿。根本原因就三条:
- 系统确实没装
make(尤其 Windows 默认没有) -
make装了,但它的可执行文件路径没进系统PATH环境变量 - 装的是
mingw32-make.exe,但 CMake 默认只认make.exe(Windows 下 MinGW 常见坑)
Windows 上让CMake认出MinGW的make
如果你用的是 MinGW(比如 Qt 自带的),别指望直接把 mingw32-make.exe 改名成 make.exe 就万事大吉——Qt 本身还依赖原名。稳妥做法是复制一份再改名:
- 进入 MinGW 的
bin目录(例如C:\Qt\Tools\mingw112_64\bin) - 找到
mingw32-make.exe,右键 → 复制,再粘贴 → 重命名为make.exe - 确认该目录已加进系统
PATH(控制面板 → 系统 → 高级系统设置 → 环境变量 → Path → 编辑) - 新开一个命令行窗口,执行
make --version和mingw32-make --version都应成功返回
Linux/macOS 下检查和修复路径
这类系统自带 make 的概率高,但 CMake 仍可能“视而不见”,重点查两件事:
- 运行
which make,看输出是不是/usr/bin/make或/usr/local/bin/make;如果不是,说明你装的是非标路径(比如自己编译的) - 如果
which make没输出,先装:Ubuntu/Debian 执行sudo apt install build-essential,macOS 执行xcode-select --install - 若
make在非标准路径(如/opt/mytools/bin/make),别在CMakeLists.txt里硬写set(CMAKE_MAKE_PROGRAM ...)—— 更可靠的是在调用 CMake 时传参:cmake -G"Unix Makefiles" -DCMAKE_MAKE_PROGRAM=/opt/mytools/bin/make ..
Ninja 替代 make 时的典型陷阱
选 Ninja 是为了快,但它比 make 更挑 CMake 版本和环境配置:
- 旧版 CMake(ninja-build 而不是
ninja,装完 Ninja 后务必运行ninja --version确认命令名 - Windows 下 Ninja 二进制文件(
ninja.exe)必须放在PATH里,不能只靠相对路径或当前目录 - 如果用
cmake -GNinja同时又手动传了-DCMAKE_MAKE_PROGRAM=(值为空或无效),CMake 会直接报错,删掉这个参数即可
真正卡住人的地方往往不是“没装”,而是“装了但路径没透到 CMake 启动的进程里”——尤其是 IDE(VS Code、CLion)启动的终端可能不继承你 shell 的 PATH,这时候得去 IDE 设置里单独配环境变量,而不是只改系统 PATH。











