「Ccache」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎その他: Sloppinessを翻訳して追加)
(→‎makechrootpkg: add Caveat.)
114行目: 114行目:
 
$ makechrootpkg -d /path/to/cache/:/ccache -r /path/of/chroot -- CCACHE_DIR=/ccache
 
$ makechrootpkg -d /path/to/cache/:/ccache -r /path/of/chroot -- CCACHE_DIR=/ccache
 
上記で説明しているように chroot でも ccache が使われるように設定してください。
 
上記で説明しているように chroot でも ccache が使われるように設定してください。
  +
  +
== Caveat ==
  +
  +
''ccache'' is effective '''only''' when compiling '''exactly identical''' sources. (More exactly, preprocessed sources.)
  +
  +
In the Gentoo Linux community, a source based distribution, ''ccache'' has been notorious for its placebo effect, compilation failure (due to undesirable leftover objects), etc. Gentoo requires to turn off ''ccache'' before reporting compilation failure. See [[Gentoo:Handbook:Parts/Working/Features#Caching compilation objects]] and [https://flameeyes.blog/2008/06/21/debunking-ccache-myths/ the blog post] titled "Debunking ccache myths" by Diego Pettenò, an ex-Gentoo developer.
   
 
== 参照 ==
 
== 参照 ==

2024年5月8日 (水) 18:17時点における版

関連記事

gcc のための素敵なツール、それが ccache です。ccache の説明は ホームページ にあります。

同じプログラムを何度もコンパイルするような場合 (複数のカーネルパッチを試してみたり、ソフトウェアの開発でテストしたりするような場合など) に、ccache はうってつけです。ccache でプログラムをコンパイルすると最初は数秒だけ長く時間がかかりますが、それ以降のコンパイルはずっと早くなります。

インストール

ccache パッケージをインストールしてください。

設定

設定ファイルを使うことでデフォルトの挙動を上書きできます。設定の優先順位は以下の通りです (優先順位の高いものから並べています):

  1. 環境変数
  2. ユーザー個別の設定ファイル ($HOME/.ccache/ccache.conf)
  3. 全ユーザー共通の設定ファイル (/etc/ccache.conf)

makepkg で ccache を有効にする

makepkg の使用時に ccache を有効にするには /etc/makepkg.conf を編集して下さい。BUILDENV の中の ccache の前のエクスクラメーションマークを除去すれば有効になります。例:

/etc/makepkg.conf
BUILDENV=(fakeroot !distcc color ccache check !sign)
ノート: KDE などをコンパイルする場合は CPP や CXX の export を無効にする必要があります、それでいくつかのエラーを止めることができます。

コマンドラインで有効にする

パッケージを作成するのではなく、コマンドラインからコードをコンパイルするとき、ccache を使うことでコンパイル速度を向上させることができます。

そのためには、$PATHccache のバイナリを(コンパイラのパスの前に)含むようにする必要があります。

$ export PATH="/usr/lib/ccache/bin/:$PATH"

定期的に使う場合は ~/.bashrc ファイルにこの行を加えると良いでしょう。

ノート: 上記の設定をすると makepkg でも ccache が有効になります。

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 ディレクトリから、SSDRAM ディスクなどの高速にアクセス可能な場所にキャッシュディレクトリを移動することができます。

キャッシュの位置を変更するには (現在のシェルでのみ有効):

$ 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 が使われるように設定してください。

Caveat

ccache is effective only when compiling exactly identical sources. (More exactly, preprocessed sources.)

In the Gentoo Linux community, a source based distribution, ccache has been notorious for its placebo effect, compilation failure (due to undesirable leftover objects), etc. Gentoo requires to turn off ccache before reporting compilation failure. See Gentoo:Handbook:Parts/Working/Features#Caching compilation objects and the blog post titled "Debunking ccache myths" by Diego Pettenò, an ex-Gentoo developer.

参照