ccache
ccache 是一个编译器包装器,它将编译后的二进制文件存储在磁盘上,并在随后重新编译相同代码时提供这些文件,以加快编译速度。虽然第一次编译程序可能需要多几秒钟,但随后的编译会快得多,因为不需要进行实际的编译,只需查找先前存储的二进制文件即可。ccache
兼容 GCC 和 Clang。
安装
配置
默认行为可以通过配置文件覆盖。配置设置的优先级如下(1 为最高优先级):
- 环境变量
- 缓存特定配置文件 (
$HOME/.config/ccache/ccache.conf
) - 系统范围配置文件 (
/etc/ccache.conf
)
详情请参阅 ccache(1)。
为 makepkg 启用 ccache
要在使用 makepkg 时启用 ccache,请编辑 /etc/makepkg.conf
。在 BUILDENV
中,取消注释 ccache
(删除感叹号)以启用缓存。例如
/etc/makepkg.conf
BUILDENV=(!distcc color ccache check !sign)
为命令行启用
如果您正在从命令行编译代码,而不是构建软件包,那么您仍然需要使用 ccache 来帮助加速。
为此,您可以在每个编译命令前加上 ccache
。
$ ccache cc hello_world.c
或者,更改您的 $PATH
以包含 ccache 的二进制文件,使其位于编译器路径之前
$ export PATH="/usr/lib/ccache/bin:$PATH"
您可能希望将此行设置为 环境变量 以便经常使用。
通过 colorgcc 启用
由于 colorgcc 也是一个编译器包装器,因此需要注意确保每个包装器都以正确的顺序调用。
export PATH="/usr/lib/colorgcc/bin/:$PATH" # As per usual colorgcc installation, leave unchanged (don't add ccache) export CCACHE_PATH="/usr/bin" # Tell ccache to only use compilers here
然后需要告知 colorgcc 调用 ccache 而不是真正的编译器。编辑 /etc/colorgcc/colorgccrc
,并将 /usr/bin
路径更改为 /usr/lib/ccache/bin
,对于 /usr/lib/ccache/bin
中的所有编译器。
/etc/colorgcc/colorgccrc
g++: /usr/lib/ccache/bin/g++ gcc: /usr/lib/ccache/bin/gcc c++: /usr/lib/ccache/bin/g++ cc: /usr/lib/ccache/bin/cc g77:/usr/bin/g77 f77:/usr/bin/g77 gcj:/usr/bin/gcj
较新版本的 ccache 在设置 GCC_COLORS
时将始终为 GCC 启用颜色。默认情况下,Clang 已启用颜色。如果输出不是 TTY,ccache 将要求编译器生成颜色,并将其存储在缓存中,但从输出中剥离它们。在统一 -fdiagnostics-color 方面仍然存在一些问题。
杂项
宽松性
默认情况下,ccache 使用非常保守的比较,最大限度地减少误报,并且对于某些项目,也减少了实际的正报。其中一些比较被认为是无用的,可以更改
$ ccache --set-config=sloppiness=locale,time_macros
这告诉 ccache 忽略 __FILE__
和与时间相关的宏,这些宏通常会使缓存失效,并在 可重现构建 中被认为是有害的。区域设置差异也被忽略;ccache 主要关注它,因为它决定了诊断消息的语言。
可以导出 CCACHE_SLOPPINESS
环境变量 以覆盖任何预先存在的宽松性设置。
默认情况下,ccache 还会缓存每次构建时使用的当前目录,这意味着对于每次调用时都使用新的随机临时目录的构建管道,会发生缓存未命中。请参阅 ccache 手册的 在不同目录中编译 部分。
更改缓存目录
您可能希望将缓存目录移动到比默认的 ~/.cache/ccache
目录更快的位置,例如 SSD 或 ramdisk。
要仅在当前 shell 中更改缓存位置
$ export CCACHE_DIR=/ramdisk/ccache
或者默认更改位置
~/.config/ccache/ccache.conf
cache_dir = /ramdisk/ccache
设置最大缓存大小
默认值为 5 GB,但是可以使用更低甚至更高的值
$ ccache --set-config=max_size=2.0G
通过环境变量禁用缓存
如果您希望禁用 ccache,请设置以下 环境变量
$ export CCACHE_DISABLE=1
CLI
您可以使用命令行实用程序 ccache 来显示统计摘要
$ ccache -s
完全清除缓存
$ ccache -C
makechrootpkg
也可以将 ccache 与来自 devtools 软件包的 makechrootpkg 一起使用。要在清理 chroot 时保留缓存,可以使用 makechrootpkg 选项 -d
将缓存目录从常规系统绑定到 chroot 中,例如
$ mkdir /path/of/chroot/ccache $ makechrootpkg -d /path/to/cache/:/ccache -r /path/of/chroot -- CCACHE_DIR=/ccache
然后可以按照上面针对常规系统解释的相同方式为 chroot 配置 ccache。
注意事项
ccache 仅在编译完全相同的源代码时有效。(更准确地说,是预处理后的源代码。)
在 Gentoo Linux 社区(一个基于源代码的发行版)中,ccache 因其安慰剂效应、编译失败(由于不希望的残留对象)等而臭名昭著。Gentoo 要求在报告编译失败之前关闭 ccache。请参阅 Gentoo:Handbook:Parts/Working/Features#Caching compilation objects 和由前 Gentoo 开发者 Diego Pettenò 撰写的题为“Debunking ccache myths”的博客文章。