ccache

来自 Arch Linux 中文维基

Ccache 是一个编译器的包装,它将已编译的二进制文件存储在指定位置,并将其提供给用户,以加快同一代码的重新编译。虽然第一次编译程序可能要时间长些,但随后的编译会快得多,因为不需要进行重复编译,只需要对之前存储的二进制文件进行查找。ccacheGCCClang 兼容。

安装[编辑 | 编辑源代码]

安装位于官方软件仓库ccache 软件包。

配置[编辑 | 编辑源代码]

可以用配置文件修改默认行为,优先级由高到低为:

  1. 环境变量
  2. 单个 Cache 的配置文件 ($HOME/.config/ccache/ccache.conf)
  3. 系统配置文件 (/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"

你他可以把它设置到你的环境变量里,方便多次使用。

注意: 如果用这个方法,将同时对 makepkg 启用 ccache


启用 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 objectsthe blog post 题为 "Debunking ccache myths",作者是 Diego Pettenò,一位前 Gentoo 开发者。

参阅[编辑 | 编辑源代码]