4

使用 CCACHE 时使用多个缓存目录或完全清除缓存的实际原因是什么?

Buildroot BR2_CCACHE 配置选项的帮助说明说:

请注意,当编译器以不兼容的方式更改时,Buildroot 不会尝试使缓存内容无效。因此,如果您更改编译器版本和/或配置,您有责任通过删除 $HOME/.buildroot-ccache 目录来清除 ccache 缓存。

如果我理解正确,CCACHE 会识别不同的编译器版本并且缓存是在每个编译器的基础上完成的。那么,描述所指的那些情况是什么?

此外,一些消息来源似乎建议应定期清除缓存。其他人指出缓存达到“最大缓存大小”阈值时会自动清理

显然,如果缓存的数据已损坏,那么您需要对其进行处理。还有其他清除缓存的原因吗?保留一个缓存不是很有意义吗?

4

1 回答 1

7

主要原因是因为 buildroot 将 CCACHE_COMPILERCHECK 变量设置为“无”。请参阅Buildroot 中的 ccache.mk

Buildroot 这样做是有充分理由的:每次他们重建相同的编译器版本(比如 gcc 4.8.0)时,所有的 ccache 结果都会被丢弃,即使它们仍然有效。此外,工具链的另一部分可能会发生变化。这也会影响缓存的文件,但不会通过检查编译器版本是否更改来检测。将来,可能会使用涵盖工具链所有必要部分的广泛检查。情况似乎还不是这样。

显然,这不是最优的:理想情况下,当您将编译器版本从 4.8 更改为 4.9 时,会自动清除 ccache 结果。现在,您必须手动执行此操作。

于 2015-01-13T06:54:59.583 回答