必须手动创建build目录,因CMake强制要求源外构建(out-of-source build),避免CMakeCache.txt等生成文件污染源码目录、干扰Git和IDE,并确保路径解析正确;mkdir build && cd build是安全起点,缺一不可。

build 目录不是安装 CMake 后自动创建的,它必须由你手动建立,并且位置、命名、进入方式都直接影响后续命令能否正常执行。
为什么必须手动建 build 目录?
CMake 默认不做“源码内构建”(in-source build),这是硬性设计。如果你直接在源码根目录运行 cmake .,生成的 CMakeCache.txt、Makefile 或 .vcxproj 会混进源码里,污染 Git 提交、干扰 IDE 索引、甚至导致重复构建失败。所以官方流程强制要求“源外构建”(out-of-source build)——build 就是那个隔离出来的构建区。
mkdir build && cd build 是唯一安全起点
所有标准操作都基于这个两步动作,缺一不可:
-
mkdir build:必须在项目根目录(即含CMakeLists.txt的目录)下执行,不能在子目录或任意路径建 -
cd build:后续所有cmake和cmake --build命令都必须在这个目录里运行,否则路径解析全错 - 别用
cmake -B build一步代替——它虽能建目录,但不会自动cd进去;而cmake --build build又要求你当前已在别的目录,极易混淆
常见错误:build 目录名写错或路径搞混
这些看似小问题,实际会导致 Could not find CMakeLists.txt 或 No such file or directory:
- 把
build写成Build、BUILD或build_dir:CMake 不识别别名,cmake ..会找不到上层CMakeLists.txt - 在
src/或include/目录里建build:此时cmake ..指向的是src/..,不是项目根目录 - 用绝对路径建但没切进去:比如
mkdir /tmp/myproj-build && cmake -S . -B /tmp/myproj-build,之后必须cd /tmp/myproj-build才能cmake --build .
build 目录删了重来最干净
它本质就是个临时工作区,不存任何关键逻辑:
- 删掉整个
build目录比make clean更彻底,尤其当你改过CMakeLists.txt或切换编译器时 - 不要试图在
build里手动删CMakeCache.txt单独清理——CMake 会缓存旧路径,残留状态常引发Cannot open file类错误 - IDE(如 VS 或 Qt Creator)自动生成的
build目录结构可能嵌套多层,只要顶层是空的,直接rm -rf build或 Shift+Delete 就行
build 目录本身没有 magic,但它承载了 CMake 对路径、缓存、生成器配置的所有依赖。哪怕只漏掉一个 cd build,后面所有命令都在无效上下文中执行——这点最容易被跳过,也最难排查。


















