build目录应放在源码根目录外的独立子目录(如build或out),严禁直接在源码根目录执行cmake .,否则会污染源码、干扰git和ide;推荐使用cmake -s . -b build命令显式指定源码与构建路径。

build 目录该放在哪?别放源码根目录里
直接在源码根目录下执行 cmake . 是常见误区——这会让 CMake 把构建文件(CMakeCache.txt、CMakeFiles/、生成的项目文件等)全塞进源码目录,污染 Git 工作区,还可能触发 IDE 误索引。Windows 上推荐用独立子目录,比如 build 或 out,和源码平级或放在任意干净路径下。
实操建议:
- 打开终端(PowerShell 或 CMD),cd 到你的源码根目录(含
CMakeLists.txt的那个目录) - 运行
mkdir build && cd build(PowerShell)或mkdir build && cd build(CMD 需确认路径无空格) - 确保当前路径不含中文、空格、特殊符号——CMake 在 Windows 上对路径敏感,
C:\my project\build可能导致 Ninja 找不到编译器
cmake .. 还是 cmake -S . -B build?选后者更稳
cmake .. 是传统写法,依赖当前目录已进入 build,且隐式指定源码路径为上一级。但 Windows 上容易因路径解析出错(尤其跨盘符时),而且不显式声明源码/构建路径,CI 脚本易出错。
推荐用 cmake -S . -B build 形式(CMake 3.13+ 支持):
-
-S .明确告诉 CMake 源码在当前目录(.),不受 cd 路径影响 -
-B build强制指定构建目录为build子目录(自动创建,无需提前mkdir) - 即使你在
D:\src\project,也能安全执行cmake -S "D:\src\project" -B "E:\temp\build",跨盘符也 OK
Visual Studio 生成器怎么选?别只认 Visual Studio 17 2022
Windows 上最常用的是 Visual Studio 生成器,但版本号必须和你本地安装的 VS 匹配,否则 cmake -G 会报错或降级到 Ninja。查已安装版本:运行 cmake -G 看列表,或看 VS 安装目录(如 C:\Program Files\Microsoft Visual Studio22\Community → 对应 "Visual Studio 17 2022")。
关键点:
- 命令行中必须用双引号包裹生成器名:
cmake -G "Visual Studio 17 2022" -A x64 -S . -B build -
-A x64指定架构,不加默认是 Win32(32 位),容易链接失败 - 如果只装了 VS Build Tools(没装完整 IDE),仍可用
"Visual Studio 17 2022",但需确认勾选了“C++ build tools”组件 - 想用 Ninja?先
choco install ninja或手动下载,再cmake -G Ninja -S . -B build,速度更快,但调试体验不如 VS
第一次 configure 失败?先关掉杀毒软件和 OneDrive
CMake 在 Windows 上 configure 阶段会高频读写临时文件、调用 cl.exe 或 link.exe,某些国产杀软(如 360、腾讯电脑管家)或 OneDrive 同步会拦截或延迟文件访问,导致 CMake Error at CMakeLists.txt:10 (project): No CMAKE_CXX_COMPILER could be found. 这类错误。
排查步骤:
- 临时禁用实时防护,再运行
cmake -S . -B build -G "Visual Studio 17 2022" -A x64 - 检查
build/CMakeCache.txt是否生成;若生成但内容为空或只有注释,大概率是权限/拦截问题 - 确认 VS 开发者命令行环境是否就绪:运行
vswhere -latest -products * -requires Microsoft.Component.MSBuild,有输出才说明工具链可被 CMake 发现
build 目录本身很简单,但 Windows 上的路径、权限、工具链发现这三个环节最容易卡住——不是 CMake 不会建目录,而是它建完目录后立刻要调用编译器,而那一步常被系统层拦住。











