ccache
ccache
は、コンパイルされたバイナリをディスクに保存し、同じコードの最終的な再コンパイルを高速化するためにそれらを提供するコンパイラ ラッパーです。初めてプログラムをコンパイルするのに数秒長くかかる場合がありますが、適切なコンパイルは行われず、以前に保存されたバイナリを参照するだけなので、その後のコンパイルははるかに高速になります。 ccache
は GCC および Clang と互換性があります。
目次
インストール
設定
設定ファイルを使うことでデフォルトの挙動を上書きできます。設定の優先順位は以下の通りです (優先順位の高いものから並べています):
- 環境変数
- ユーザー個別の設定ファイル (
$HOME/.ccache/ccache.conf
) - 全ユーザー共通の設定ファイル (
/etc/ccache.conf
)
詳細は、ccache(1) を参照してください。
makepkg で ccache を有効にする
makepkg の使用時に ccache を有効にするには /etc/makepkg.conf
を編集して下さい。BUILDENV
の中の ccache の前のエクスクラメーションマークを除去すれば有効になります。例:
/etc/makepkg.conf
BUILDENV=(fakeroot !distcc color ccache check !sign)
コマンドラインで有効にする
パッケージを作成するのではなく、コマンドラインからコードをコンパイルするとき、ccache
を使うことでコンパイル速度を向上させることができます。
そのためには、$PATH
に ccache
のバイナリを(コンパイラのパスの前に)含むようにする必要があります。
$ export PATH="/usr/lib/ccache/bin/:$PATH"
定期的に使う場合は ~/.bashrc
ファイルにこの行を加えると良いでしょう。
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
そして本当のコンパイラの代わりに ccache を呼び出すように colorgcc を設定してください。/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
その他
Sloppiness
ccache はデフォルトで、誤検知と、一部のプロジェクトでは実際の検知の両方を最小限に抑える非常に保守的な比較を使用します。一部の比較は役に立たないとみなされるため、変更できます。
$ ccache --set-config=sloppiness=locale,time_macros
これは、ccache に __FILE__
および時間関連のマクロを無視するように指示します。これらのマクロは通常、キャッシュを無効にし、再現性のあるビルドでは有害であると考えられます。ロケールの違いも無視されます。ccache がこれを考慮するのは、主に診断メッセージの言語を決定するためです。
CCACHE_SLOPPINESS
環境変数をエクスポートして、既存の sloppiness 設定をオーバーライドできます。
また、ccache は、デフォルトで各ビルドに使用されている現在のディレクトリをキャッシュします。これは、呼び出されるたびに新しいランダムな一時ディレクトリを使用するビルドパイプラインのキャッシュミスを意味します。ccache マニュアルの Compiling in different directories セクションを参照してください。
キャッシュディレクトリを変更する
デフォルトの ~/.ccache
ディレクトリから、SSD や RAM ディスクなどの高速にアクセス可能な場所にキャッシュディレクトリを移動することができます。
キャッシュの位置を変更するには (現在のシェルでのみ有効):
$ export CCACHE_DIR=/ramdisk/ccache
あるいは永続的に位置を変更するには:
/home/user/.ccache/ccache.conf
cache_dir = /ramdisk/ccache
最大キャッシュ容量の設定
デフォルトでは5ギガバイトとなっていますが、多くしたり少なくしたりすることができます:
$ ccache --set-config=max_size=2.0G
もしくは:
$HOME/.ccache/ccache.conf
max_size = 2.0G
環境変数でキャッシュを無効化
現在のシェルでのみ CCache を無効化したい場合、以下を設定:
$ export CCACHE_DISABLE=1
CLI
ccache のコマンドラインユーティリティを使うことで以下の操作ができます。
統計を表示する:
$ ccache -s
キャッシュを完全に削除する:
$ ccache -C
makechrootpkg
makechrootpkg で ccache を使うこともできます。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 および Diego Pettenò(元 Gentoo 開発者)による "Debunking ccache myths" と題されたブログ投稿 the blog post を参照してください。