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