在 我们的 C++ 项目中,我们设法设置 GitHub Actions 使用 ccache 构建我们的源代码。
它在 Linux 上运行得非常好,感谢
ccache
,构建在不到 5 分钟内就成功了。
不幸的是,当尝试在 macOS 上构建时,
ccache
似乎不起作用,给出:
cache directory /Users/runner/.ccache
primary config /Users/runner/.ccache/ccache.conf
secondary config (readonly) /usr/local/Cellar/ccache/3.7.11_1/etc/ccache.conf
stats updated Sun Aug 23 11:57:31 2020
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 7175
cache hit rate 0.00 %
cache file missing 1
cleanups performed 2976
files in cache 165
cache size 422.4 MB
max cache size 500.0 MB
因此,macOS 构建大约需要 40 分钟才能完成。
构建示例:https://github.com/azerothcore/azerothcore-wotlk/runs/1018358261
这是定义操作的地方:https://github.com/azerothcore/azerothcore-wotlk/blob/master/.github/workflows/core_build.yml
整个项目的源代码可公开获取:https://github.com/azerothcore/azerothcore-wotlk
因此,尽管我尝试以与
macOS
相同的方式设置 ubuntu-*
构建,但我未能让 ccache 正常工作,而且我不明白为什么。
如何让
ccache
也与 macOS
一起使用?
问题很可能是最大缓存大小太小。如果构建的结果(主要是对象文件)不适合 最大缓存大小,则不会为下一个构建留下可用的结果,并且您只会遇到缓存未命中。
构建前执行的清理为 2976 次,构建后为 3353 次,因此执行了 377 次自动清理。由于“最大缓存大小”为 500 MB,因此每次清理删除了大约 500 * (1 - 0.8) / 16 MB = 6.25 MB,因此所有清理总共删除了大约 377 * 6.25 MB ≈ 2356 MB 的数据。这应该大约是一次构建结果的大小。 (0.8是默认的“limit_multiple”,16指的是缓存中的子目录数量。) 尝试大幅增加缓存大小限制。根据以上计算,良好的缓存大小至少为 5 GB。您还可以或选择启用压缩 (
CCACHE_COMPRESS=1
) 以在缓存中容纳更多结果。