ccache
Ccache 是一个编译器的包装,它将已编译的二进制文件存储在指定位置,并将其提供给用户,以加快同一代码的重新编译。虽然第一次编译程序可能要时间长些,但随后的编译会快得多,因为不需要进行重复编译,只需要对之前存储的二进制文件进行查找。ccache
与 GCC 和 Clang 兼容。
安装[编辑 | 编辑源代码]
配置[编辑 | 编辑源代码]
可以用配置文件修改默认行为,优先级由高到低为:
- 环境变量
- 单个 Cache 的配置文件 (
$HOME/.config/ccache/ccache.conf
) - 系统配置文件 (
/etc/ccache.conf
)
详见 ccache(1)。
为 makepkg 启用 ccache[编辑 | 编辑源代码]
要在 makepkg 启用 ccache,请编辑 /etc/makepkg.conf
. 在 BUILDENV
中删除 ccache 前的感叹号:
BUILDENV=(fakeroot !distcc color ccache !xdelta)
在命令行中启用[编辑 | 编辑源代码]
如果要从中命令行编译而不是生成软件包,同样可以使用 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" # 按照正常安装 colorgcc 的情况保持不变(不要添加 ccache)
export CCACHE_PATH="/usr/bin" # 告诉 ccache 只使用这里的编译器
colorgcc 需要调用 ccache 而不是真正的编译器。编辑 /etc/colorgcc/colorgccrc
修改所有 /usr/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/gcc g77:/usr/bin/g77 f77:/usr/bin/g77 gcj:/usr/bin/gcj
新版本的 ccache 在设置 GCC_COLORS
时,将始终为GCC启用颜色支持,同时 Clang 默认启动多色输出。如果输出对象不是 TTY,ccache 会让编译器生成颜色,将它们保存在缓存中,但从输出中剥离。在统一 -fdiagnostics-color 方面仍然存在一些问题。
Misc[编辑 | 编辑源代码]
修改缓存目录[编辑 | 编辑源代码]
可以将缓存目录 ~/.cache/.ccache
配置到其它地方,例如 SSD 或 ramdisk:
要在修改当前 shell 的缓存目录:
$ export CCACHE_DIR=/ramdisk/ccache
要修改默认缓存目录:
~/.config/.ccache/ccache.conf
cache_dir = /ramdisk/ccache
设置最大缓存大小[编辑 | 编辑源代码]
默认值是 5G,可以通过配置修改:
/home/<user>/.ccache/ccache.conf
max_size = 2.0G
通过环境变量禁用缓存[编辑 | 编辑源代码]
如果你想只在当前的shell中禁用 ccache:
$ export CCACHE_DISABLE=1
CLI[编辑 | 编辑源代码]
此外可以使用 ‘’ccache‘’ 命令行工具。
显示统计数据:
$ ccache -s
清空缓存:
$ ccache -C
makechrootpkg[编辑 | 编辑源代码]
devtools包 中 makechrootpkg 也可以使用 ccache,要在清理 chroot 后保留缓存,可以使用 makechrootpkg 的 -d
选项将 cache 目录从普通系统绑定到 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 和 the blog post 题为 "Debunking ccache myths",作者是 Diego Pettenò,一位前 Gentoo 开发者。