CCACHE 时使用多个缓存目录或完全清除缓存的实际原因是什么?
构建根BR2_CCACHE配置选项的帮助说明说:
请注意,当编译器以不兼容的方式更改时,Buildroot 不会尝试使缓存内容失效。因此,如果对编译器版本和/或配置进行更改,则负责通过删除 $HOME/.buildroot-ccache 目录来清除 ccache 缓存。
如果我理解正确,CCACHE 会识别不同的编译器构建,并且缓存是在每个编译器的基础上完成的。那么,描述所指的那些情况是什么?
此外,一些消息来源似乎建议应定期清除缓存。其他人指出,当缓存达到"最大缓存大小"阈值时,会自动清理缓存。
显然,如果缓存的数据已损坏,则需要对此执行一些操作。是否有其他原因需要清除缓存?保留单个缓存没有意义吗?
主要原因是因为buildroot将CCACHE_COMPILERCHECK变量设置为"none"。请参阅Buildroot中的 ccache.mk。
Buildroot 这样做是有充分理由的:每次他们重建相同的编译器版本(比如 gcc 4.8.0)时,所有 ccache 结果都会被抛弃,即使它们仍然有效。此外,工具链的另一部分可能会发生变化。这也会影响缓存的文件,但不会通过检查编译器版本是否更改来检测。将来,可能会使用涵盖工具链所有必要部分的广泛检查。似乎还没有这样。
显然,这不是最佳选择:理想情况下,当您将编译器版本从 4.8 更改为 4.9 时,ccache 结果将自动清除。现在,您必须手动执行此操作。