DNA Cafe | Download | FreeSoftware | Java | Links
ccache はコンパイラキャッシュである。 C や C++ コードをコンパイルした結果を保存しておき、同じコンパイルが行なわれるのを検知し再利用することで、再コンパイルするときの速度を上げる。
ccache を単独で使うことはほとんどなく、通常 make と組み合わせて使用する。 開発中など、何度も利用するソースコードに使用すると特に効果的である。 逆に一度しかコンパイルしないときには使う意味がない。
使うときにはコンパイルコマンドの前に ccache をつける。
$ make CC="ccache cc"
使用するコンパイラを指定したい場合には cc の部分を適当に変える。
一度コンパイルした後、再び同じコードをコンパイルするときにはキャッシュされた結果が使用される。
例えば、以下の場合、二回目の make ではキャッシュされた結果が使用される。
$ make CC="ccache cc" # 1st time
$ make CC="ccache cc" clean
$ make CC="ccache cc" # 2nd time
CCACHE_PREFIX で distcc を指定する。 コンパイラは distcc の後に指定できる。
$ make CCACHE_PREFIX="distcc" CC=ccache
これらのオプションは ccache を単独で起動したときにのみ適用される。 たまにキャッシュの操作が必要かもしれないが、普段は特に使う必要がない。
キャッシュの統計や大きさを見る
$ ccache -s
キャッシュ内にたまっているゴミを消す
$ ccache -c
キャッシュされたファイルをすべて消す
$ ccache -C
キャッシュの大きさを制御する
$ ccache -F size -M number_of_files_limits
初期設定はキャッシュの大きさ (size) が 1 GiB まで、 ファイルの数 (number_of_files_limits) は制限がない。
開発者グループで ccache のキャッシュを共有できる。 この場合、共有することによってキャッシュのヒット率が上がる。 ただしファイルの時刻に関連する副作用を起こさないように注意する必要がある。 この詳細についてはマニュアルを読むこと。
まず、共有用のリソースを準備する。これは以下の手順になる。
例えば ccache というグループを作って共有用ディレクトリを用意するなら、こうなる。
$ groupadd -g 1234 ccache
$ vigr
ccache:*:1234:user
$ mkdir common_directory
$ chgrp ccache common_directory
$ chmod g+s common_directory
リソースの準備ができたら ccache の環境変数を設定して make する。 このとき、キャッシュ共有用ディレクトリを CCACHE_DIR で、 グループで読み書きできるマスクを CCACHE_UNMASK で設定する。 また、ログを指定すると問題が起こった時に判別しやすい。
$ CCACHE_DIR=common_directory
$ CCACHE_UNMASK=002
$ CCACHE_LOGFILE=logfile
$ export CCACHE_DIR CCACHE_UNMASK CCACHE_LOGFILE
$ make CC="ccache cc"
複数のホストで分散コンパイルを行ない、さらにキャッシュを共有する場合には distcc と ccache を組み合わせる。使うための準備は以下の手順になる。
これらの準備ができたら ccache と distcc の環境変数を両方設定して make する。 CCACHE_PREFIX には distcc を指定する。
$ export DISTCC_HOSTS="host_to_use_for_compilation ..."
$ export CCACHE_DIR=common_directory
$ export CCACHE_UMASK=002
$ export CCACHE_PREFIX=distcc
$ export CCACHE_LOGFILE=logfile
$ make -j4 CC="ccache cc"
make に指定する -j の値については distcc のメモを参照すること。