删CMakeCache.txt仍报错需先确认删除位置是否正确,它通常位于build/子目录而非根目录;建议直接删除整个build文件夹或递归清理CMakeCache.txt、CMakeFiles/和Makefile。

删了CMakeCache.txt还是报错?先确认是不是删对了位置
很多人以为删掉根目录下的CMakeCache.txt就完事,其实它通常藏在build/子目录里(比如build/Debug/CMakeCache.txt或build/Release/CMakeCache.txt)。VS Code + STM32插件默认用build/Debug,而命令行构建可能用build顶层。误删根目录的同名文件没用,甚至可能干扰后续配置。
建议操作:
- 直接进
build文件夹,删整个文件夹(最保险) - 如果保留
build结构,用find . -name CMakeCache.txt -delete递归清理(Linux/macOS)或手动搜CMakeCache.txt全盘删除(Windows) - 别只删
CMakeCache.txt,顺手清掉CMakeFiles/和Makefile(它们也带缓存状态)
CMake: Delete Cache and Reconfigure不管用?检查Kit是否真的生效
VS Code里按Ctrl+Shift+P → CMake: Delete Cache and Reconfigure看似一键解决,但实际可能没选对Kit。尤其STM32项目依赖ARM工具链,如果CMake: Select a Kit里显示的是GNU GCC for x86_64-linux-gnu这类本地编译器,而不是GNU Tools for ARM Embedded Processors或你安装的arm-none-eabi-gcc路径,那重配置只是换了个错误的环境跑。
验证方法:
- 执行
CMake: Select a Kit后,看右下角状态栏是否显示正确工具链路径(如/opt/gcc-arm-none-eabi/bin/arm-none-eabi-gcc) - 打开
build/CMakeCache.txt,搜CMAKE_C_COMPILER,确认值是ARM交叉编译器,不是/usr/bin/gcc - 如果Kit列表为空,说明插件没扫描到工具链——去
settings.json里手动配"cmake.configureArgs"加-DCMAKE_TOOLCHAIN_FILE=...
报错里出现“source does not match”?工程路径变动必须硬清缓存
像CMake Error: The source "/old/path/CMakeLists.txt" does not match the source "/new/path/CMakeLists.txt"这种提示,本质是CMake在缓存里记死了旧路径,连CMake: Delete Cache and Reconfigure都绕不过去——因为VS Code插件调用CMake时仍会读取残留的CMakeCache.txt元数据。
必须做两件事:
- 关掉所有VS Code窗口(避免后台进程锁住缓存文件)
- 进终端,cd到工程根目录,执行:
rm -rf build && mkdir build && cd build && cmake ..(别用GUI按钮,亲手走一遍流程) - 如果用CubeMX生成的工程,检查
CMakeLists.txt顶部是否有硬编码路径(比如set(STM32_PROJECT_PATH "/old/path")),改掉
清理完还卡在下载失败?CMakeDownloadLog.txt才是真相
当Configuring incomplete, errors occurred!后面跟着一堆file DOWNLOAD cannot compute hash,问题不在缓存,而在依赖下载。此时CMakeCache.txt删十遍也没用。
关键动作:
- 打开
build/CMakeDownloadLog.txt,从末尾往前翻,找第一个FAILED或Timeout was reached的条目 - 对应URL如果是GitHub,换成镜像源(如把
https://github.com/xxx/yyy/archive/v1.0.zip改成https://ghproxy.com/https://github.com/xxx/yyy/archive/v1.0.zip) - 若用CPM.cmake,给
CPMAddPackage加TIMEOUT 300和FORCE TRUE参数 - 临时关掉杀毒软件或防火墙——某些国产软件会拦截
file(DOWNLOAD)的SSL握手
缓存只是CMake的“记忆”,但路径错、工具链错、网络错、权限错,每一种错都有自己的藏身之处。动手前先看错在哪一行,比盲目删文件有用得多。


















