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 開發者。

參閱[編輯 | 編輯原始碼]