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

Caching 清除ccache或使用多个ccache目录的原因,caching,buildroot,ccache,Caching,Buildroot,Ccache,在使用CCACHE时,使用多个缓存目录或完全清除缓存的实际原因是什么 Buildroot BR2_CCACHE配置选项的帮助说明如下: 请注意,当编译器以不兼容的方式更改时,Buildroot不会尝试使缓存内容无效。因此,如果您更改了编译器版本和/或配置,您将负责通过删除$HOME/.buildroot ccache目录来清除ccache缓存 如果我理解正确,缓存是在每个编译器的基础上完成的。那么,描述所指的情况是什么 此外,一些消息来源似乎建议应定期清除缓存 显然,如果缓存的数据已损坏,那么您

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

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

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

如果我理解正确,缓存是在每个编译器的基础上完成的。那么,描述所指的情况是什么

此外,一些消息来源似乎建议应定期清除缓存


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

主要原因是buildroot将CCACHE\u COMPILERCHECK变量设置为“none”。看

Buildroot这样做是有充分理由的:每次他们重建相同的编译器版本(比如GCC4.8.0),所有的ccache结果都会被抛出,即使它们仍然有效。此外,工具链的另一部分可能会发生变化。这也会影响缓存文件,但不会通过检查编译器版本是否更改来检测。在未来,可能需要对工具链的所有必要部分进行全面检查。看起来还不是这样


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

我没有什么要补充的,这个答案非常完美。谢谢我不明白帮助描述的要点是说Buildroot没有使用ccache的每编译器缓存项分离机制。我想我刚刚经历了一次顿悟。澄清一下:对于Buildroot,如果处理多个单独的项目,使用特定于工具链的缓存是合理的。我理解正确吗?是的,你理解正确。您可以使用多个ccache目录,并根据所使用的工具链在它们之间切换。但是,请注意不要混淆它们:)