Windows下CMake编译流程分三步:指定生成器(如-G "MinGW Makefiles"或激活VC环境)、在build目录运行cmake生成构建文件、用对应工具(mingw32-make/ninja/msbuild)编译;关键在于生成器显式指定与编译环境预先就位,否则易静默失败或路径错配。

直接上结论:Windows 下 CMake 编译流程就三步,但每步都得踩对位置,否则 cmake 会静默失败或生成错的构建文件。
cmake .. 不报错,但没生成 Makefile 或 .sln?
这是最常见卡点——CMake 默认不指定生成器时,在 Windows 上会优先找 Visual Studio,找不到就 fallback 到 Ninja(如果装了),而不是 MinGW。你敲 cmake .. 却发现 build 目录里空空如也,或者只有一堆 CMakeCache.txt 和 CMakeFiles/,说明它根本没生成目标构建系统文件。
- 用 MinGW 编译:必须显式加
-G "MinGW Makefiles",不能省 - 用 MSVC(Visual Studio):可不加
-G,但前提是已运行过vcvars64.bat或vcvars32.bat(取决于你要编译的位数),否则cmake ..会报Could not find any instance of Visual Studio - 用 Ninja(推荐替代 make):先装 Ninja(
choco install ninja或下载二进制),再用-G Ninja,后续用ninja替代make或cmake --build .
mingw32-make 报错 “No rule to make target 'all'”?
这通常是因为你用了 cmake .. -G "MinGW Makefiles",但当前 shell 没识别到 mingw32-make,或者 PATH 里混了其他 make(比如 Git 自带的 make)。CMake 生成的 Makefile 只认 mingw32-make,不认 make 或 gmake。
- 确认命令可用:
mingw32-make --version能输出版本号 - 别用
make代替:make在 Windows 下常指向 Git Bash 的 GNU make,它和 MinGW 的工具链不兼容 - 如果只有
mingw64-make(常见于 MinGW-w64),就用它,但得配对:cmake .. -G "MinGW Makefiles" -DCMAKE_MAKE_PROGRAM="C:/path/to/mingw64-make.exe"
cmake --build . 失败,提示 “MSBuild.exe not found”?
这是 MSVC 路径没激活的典型症状。CMake 生成了 Visual Studio 解决方案(.sln),但调用 cmake --build . 时,底层实际调的是 MSBuild.exe,而它不在当前 shell 的 PATH 中。
- 不要在普通 CMD/PowerShell 里直接跑
cmake --build .—— 先进 VS 开发者命令行(Developer Command Prompt for VS 2022),再 cd 进 build 目录执行 - 或者手动加载环境:
"C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat"(路径按你安装的实际版本调整) - 如果你用的是 VS Code,确保通过
CMake: Select a Kit选中了对应版本的 MSVC,否则插件也会调错工具链
真正容易被忽略的不是语法,而是环境上下文:CMake 本身不编译,它只是“翻译官”;你用什么编译器,就得让那个编译器的环境先就位。PATH、shell 类型、位数(Win32/x64)、甚至终端是 CMD 还是 PowerShell,都会影响同一行 cmake 命令的行为。











