小P学长
小P学长

CMake 换目录后还指向旧路径:删缓存重配置,不要手改 CMakeCache

项目改路径、换电脑或更换编译器后,旧构建树容易留下绝对路径。用 fresh 配置、Presets 和可重现验收修复。

典型症状

项目从 A 目录复制到 B 目录后,CMake 仍然报旧源目录、旧编译器或不存在的 SDK 路径;或 IDE 不断重生成错误配置。这通常不是 CMakeLists.txt 突然坏了,而是你把旧构建树也当成了源代码搬运。

1. 先保存有用证据

cmake --version
cmake --list-presets
cmake -S . -B build-clean
cmake --build build-clean

若项目有 CMakePresets.json,优先使用 cmake --preset 名称。记录生成器、编译器版本、工具链文件与首个真正错误,不要只复制最后一行“build failed”。

2. 重建构建树

对可确认为生成物的 buildcmake-build-* 目录,先停止 IDE 构建,然后在项目副本上删除或改名旧构建树并重新配置。新版 CMake 可使用 cmake --fresh -S . -B build 以干净配置。不建议手工搜索替换 CMakeCache.txt 里的旧绝对路径,因为缓存与生成器产物应当作为一个构建树处理。

3. IDE 仍报错时分开验证

先在 IDE 外用新的空构建目录执行配置与编译。命令行成功而 IDE 失败,问题范围就收缩到 IDE Profile:核对生成器、工具链、构建目录和环境变量,并让 IDE 从同一 Preset 重新加载。如果命令行也失败,先修项目或工具链,不要用“重建索引”遮盖编译器的第一个真实错误。

4. 把团队配置与个人路径分开

  • CMakePresets.json:CMake 官方教程定位为项目配置,可进版本控制。
  • CMakeUserPresets.json:用于开发者本机配置,不应提交。
  • 秘密和 SDK 绝对路径:不要写入团队 Preset;用个人 Preset、受控环境变量或工具链发现机制处理。

验收标准

  1. 在新的空构建目录配置和编译成功。
  2. 搜索新构建树时不再出现旧机器项目路径。
  3. 另一名开发者仅用已提交文件与自己的本机 Preset 即可重建。

官方来源

同一问题集群的免费排障页

按你当前看到的报错选一页,不需要从头阅读全部内容。