ccache 在不删除 CMake 文件的情况下不会命中缓存

Posted

技术标签:

【中文标题】ccache 在不删除 CMake 文件的情况下不会命中缓存【英文标题】:ccache does not hit cache without deleting CMake files 【发布时间】:2010-05-28 15:54:00 【问题描述】:

我正在尝试将 ccache 与 CMake 一起使用。我在/usr/local/bin 中放置了名为gccg++c++ 的符号链接。如果我运行make,对 CMakeLists.txt 添加一些不影响编译文件的更改(添加未使用的库只是为了强制构建所有目标)并重新运行make,一切都重新编译,好像没有缓存。但是,如果我删除所有 CMake 生成的文件,然后调用 cmake; make,一切正常,并且从缓存中检索目标文件,即使我更改了 CMakeLists.txt。

看起来 CMake 生成的东西阻止了缓存。我尝试搜索 makecmake 的详细输出,但找不到任何可能导致此行为的依赖项。

【问题讨论】:

【参考方案1】:

我建议你安装 ccache 3.0(几天前发布)并将CCACHE_LOGFILE 设置为一个文件。然后 ccache 将打印它对该文件所做的事情,您可能会得到有关问题的线索。

【讨论】:

【参考方案2】:

当 cmake 运行时,它会将二进制文件的完整路径放入 CMakeCache.txt。这是一种速度优化,以便将来的配置更快(autoconf 需要这么长时间的部分原因是它一遍又一遍地寻找很多东西)。如果要强制 cmake 重新扫描,请删除 CMakeCache.txt 文件或从该文件中过滤掉包含要刷新的工具的路径的变量。

【讨论】:

以上是关于ccache 在不删除 CMake 文件的情况下不会命中缓存的主要内容,如果未能解决你的问题,请参考以下文章

cmake使用ccache

CMake + ccache:RULE_LAUNCH_COMPILE 或 CMAKE_<LANG>_COMPILER_LAUNCHER

为啥切片函数在不明确使用 dplyr 的情况下不起作用

在不使用 CTest 的情况下使用 CMake 构建测试

Firestore 在不重新加载应用程序的情况下不更新 SwiftUI 网格

如何在不再次运行配置脚本/cmake 的情况下修改安装路径