清除 ccache 或使用多个 ccache 目录的原因

Reasons to clear ccache or use multiple ccache directories

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

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

Note that Buildroot does not try to invalidate the cache contents when the compiler changes in an incompatible way. Therefore, if you make a change to the compiler version and/or configuration, you are responsible for purging the ccache cache by removing the $HOME/.buildroot-ccache directory.

如果我理解正确,different compiler builds are recognized by CCACHE 缓存是在每个编译器的基础上完成的。那么,描述中指的是那些情况?

此外,一些消息来源似乎建议应定期清除缓存。 Others point out that cache is cleaned up automatically when it reaches the "max cache size" threshold.

显然,如果缓存数据已损坏,那么您需要采取一些措施。还有其他清除缓存的原因吗?保留一个缓存没有意义吗?

主要原因是buildroot将CCACHE_COMPILERCHECK变量设置为'none'。参见 ccache.mk in Buildroot

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

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