cmake不生成make clean目标,因其仅生成构建系统(如visual studio或ninja),而clean行为取决于生成器本身;cmakecache.txt和cmakefiles/是配置元数据,需手动删除或重置构建目录才能彻底清理。

CMake Windows 缓存文件不能靠 make clean 清除,必须手动删或重置构建目录。
为什么 make clean 对 CMake 无效
CMake 本身不生成 make clean 目标(除非你显式用 add_custom_target(clean ...) 定义),它只负责生成构建系统(比如 Visual Studio 的 .vcxproj 或 Ninja 的 build.ninja)。而这些生成器是否支持 clean,取决于它们自身——MSBuild 有 msbuild /t:Clean,Ninja 有 ninja clean,但 Makefile 的 clean 是 CMake 不保证生成的。
- Windows 上多数人用 Visual Studio 生成器(
-G "Visual Studio 17 2022"),默认没make clean,也不存在Makefile - 即使用了 Ninja 或 MinGW Makefiles,
make clean只清理编译产物(.obj、.exe等),不碰 CMake 缓存文件 -
CMakeCache.txt和CMakeFiles/是配置元数据,不是中间产物,不会被任何构建工具自动清理
CMakeCache.txt 和 CMakeFiles/ 必须手动删
这两个是 CMake 在构建目录(build/)里写的核心缓存,删掉就等于“重装”配置。不删它们,cmake .. 会复用旧值,哪怕你改了 CMakeLists.txt 里的 set(... CACHE ...) 也不会生效。
-
CMakeCache.txt:纯文本,记录所有CACHE变量(如CMAKE_BUILD_TYPE、OpenCV_DIR)、路径、检测结果 -
CMakeFiles/目录:含临时脚本、编译器检测日志、生成的规则文件(如rules.ninja),删了不影响源码,但下次cmake会重新跑全部检测 - 别只删
CMakeCache.txt而留着CMakeFiles/——CMake 启动时发现两者不一致会报错或静默覆盖,行为不可控
推荐清理方式:删整个构建目录最安全
Windows 上没有类似 Linux 的 git clean -fdx build/ 一键命令,但直接删 build/ 文件夹是最彻底、最无副作用的做法。
- 右键 → 删除,或命令行:
rmdir /s /q build(管理员权限非必需,但确保没进程占用) - 如果用 VS IDE,关掉解决方案再删,否则
CMakeFiles/下的TargetDirectories.txt可能被锁住 - 删完重新运行
cmake -S . -B build -G "Visual Studio 17 2022",所有缓存从零重建 - 不想丢构建配置?把
build/CMakeCache.txt备份出来,删完再复制回去——但要小心变量冲突,比如CMAKE_GENERATOR改了会导致读取失败
容易被忽略的隐藏缓存点
除了构建目录,Wireshark 这类大型项目还会在用户目录下存全局缓存,影响跨项目配置:
- Windows:检查
%LOCALAPPDATA%\CMake\,里面有Cache和Packages子目录,存放 find_package 的搜索结果缓存(如Qt6_DIR命中记录) - 若反复
find_package(Qt6 REQUIRED)失败,清空这里可能比删build/更快见效 - CMake 3.20+ 默认启用
user-package-registry,路径为%LOCALAPPDATA%\CMake\UserPackageRegistry,里面是 JSON 格式的已注册库路径,误注册后会导致find_package绕过系统路径











