「Ccache」の版間の差分
細 (文字列「[[zh-CN:」を「[[zh-hans:」に置換) |
Kusanaginoturugi (トーク | 投稿記録) (→最大キャッシュ容量の設定: 記事を削除) |
||
(4人の利用者による、間の12版が非表示) | |||
1行目: | 1行目: | ||
+ | {{Lowercase title}} |
||
[[Category:パッケージ開発]] |
[[Category:パッケージ開発]] |
||
[[en:Ccache]] |
[[en:Ccache]] |
||
+ | [[pt:Ccache]] |
||
[[zh-hans:Ccache]] |
[[zh-hans:Ccache]] |
||
{{Related articles start}} |
{{Related articles start}} |
||
6行目: | 8行目: | ||
{{Related|Distcc}} |
{{Related|Distcc}} |
||
{{Related articles end}} |
{{Related articles end}} |
||
+ | {{Ic|ccache}} は、コンパイルされたバイナリをディスクに保存し、同じコードの最終的な再コンパイルを高速化するためにそれらを提供するコンパイラ ラッパーです。初めてプログラムをコンパイルするのに数秒長くかかる場合がありますが、適切なコンパイルは行われず、以前に保存されたバイナリを参照するだけなので、その後のコンパイルははるかに高速になります。 {{ic|ccache}} は [[GCC]] および [[Clang]] と互換性があります。 |
||
− | {{Ic|gcc}} のための素敵なツール、それが {{Ic|ccache}} です。ccache の説明は [http://ccache.samba.org ホームページ] にあります。 |
||
− | |||
− | 同じプログラムを何度もコンパイルするような場合 (複数のカーネルパッチを試してみたり、ソフトウェアの開発でテストしたりするような場合など) に、{{Ic|ccache}} はうってつけです。{{Ic|ccache}} でプログラムをコンパイルすると最初は数秒だけ長く時間がかかりますが、それ以降のコンパイルはずっと早くなります。 |
||
− | |||
== インストール == |
== インストール == |
||
− | + | {{pkg|ccache}} パッケージを[[pacman|インストール]]してください。 |
|
== 設定 == |
== 設定 == |
||
+ | |||
+ | 設定ファイルを使うことでデフォルトの挙動を上書きできます。設定の優先順位は以下の通りです (優先順位の高いものから並べています): |
||
+ | # 環境変数 |
||
+ | # ユーザー個別の設定ファイル ({{ic|$HOME/.ccache/ccache.conf}}) |
||
+ | # 全ユーザー共通の設定ファイル ({{ic|/etc/ccache.conf}}) |
||
+ | |||
+ | 詳細は、{{man|1|ccache}} を参照してください。 |
||
=== makepkg で ccache を有効にする === |
=== makepkg で ccache を有効にする === |
||
makepkg の使用時に ccache を有効にするには {{ic|/etc/makepkg.conf}} を編集して下さい。{{Ic|BUILDENV}} の中の ccache の前のエクスクラメーションマークを除去すれば有効になります。例: |
makepkg の使用時に ccache を有効にするには {{ic|/etc/makepkg.conf}} を編集して下さい。{{Ic|BUILDENV}} の中の ccache の前のエクスクラメーションマークを除去すれば有効になります。例: |
||
{{hc|1=/etc/makepkg.conf| |
{{hc|1=/etc/makepkg.conf| |
||
− | 2=BUILDENV=( |
+ | 2=BUILDENV=(!distcc color '''ccache''' check !sign)}} |
− | |||
− | {{Note|KDE などをコンパイルする場合は CPP や CXX の export を無効にする必要があります、それでいくつかのエラーを止めることができます。}} |
||
=== コマンドラインで有効にする === |
=== コマンドラインで有効にする === |
||
+ | |||
パッケージを作成するのではなく、コマンドラインからコードをコンパイルするとき、{{Ic|ccache}} を使うことでコンパイル速度を向上させることができます。 |
パッケージを作成するのではなく、コマンドラインからコードをコンパイルするとき、{{Ic|ccache}} を使うことでコンパイル速度を向上させることができます。 |
||
− | そのためには、 |
+ | そのためには、各コンパイルコマンドの前に {{Ic|ccache}} を付けます。 |
+ | |||
+ | $ ccache cc hello_world.c |
||
+ | |||
+ | または、コンパイラへのパスの前に ''ccache'' のバイナリを含むように {{Ic|$PATH}} を変更します: |
||
$ export PATH="/usr/lib/ccache/bin/:$PATH" |
$ export PATH="/usr/lib/ccache/bin/:$PATH" |
||
− | 定期的に使 |
+ | この行を定期的に使用するために[[環境変数]]として設定することをお勧めします。 |
− | {{Note| |
+ | {{Note|このようなエクスポートは、この PATH で呼び出された場合に ''makepkg'' でも必然的に ''ccache'' を有効にします。}} |
=== colorgcc で有効にする === |
=== colorgcc で有効にする === |
||
48行目: | 57行目: | ||
f77:/usr/bin/g77 |
f77:/usr/bin/g77 |
||
gcj:/usr/bin/gcj}} |
gcj:/usr/bin/gcj}} |
||
+ | |||
+ | 新しいバージョンの ''ccache'' では、{{ic|GCC_COLORS}} が設定されている場合、GCC については常に色を有効にします。Clang についてはデフォルトで色が有効です。出力が TTY でない場合、''ccache'' はコンパイラに色を生成させ、キャッシュに保存しますが、出力からは色を取り除きます。[https://github.com/ccache/ccache/issues/224 -fdiagnostics-color] の統一に関するいくつかの問題が残っています。 |
||
== その他 == |
== その他 == |
||
+ | |||
+ | === Sloppiness === |
||
+ | |||
+ | ''ccache'' はデフォルトで、誤検知と、一部のプロジェクトでは実際の検知の両方を最小限に抑える非常に保守的な比較を使用します。一部の比較は役に立たないとみなされるため、変更できます。 |
||
+ | |||
+ | $ ccache --set-config=sloppiness=locale,time_macros |
||
+ | |||
+ | これは、''ccache'' に {{ic|__FILE__}} および時間関連のマクロを無視するように指示します。これらのマクロは通常、キャッシュを無効にし、[[再現性のあるビルド]]では有害であると考えられます。ロケールの違いも無視されます。''ccache'' がこれを考慮するのは、主に診断メッセージの言語を決定するためです。 |
||
+ | |||
+ | {{ic|CCACHE_SLOPPINESS}} [[環境変数]]をエクスポートして、既存の sloppiness 設定をオーバーライドできます。 |
||
+ | |||
+ | また、''ccache'' は、デフォルトで各ビルドに使用されている現在のディレクトリをキャッシュします。これは、呼び出されるたびに新しいランダムな一時ディレクトリを使用するビルドパイプラインのキャッシュミスを意味します。''ccache'' マニュアルの [https://ccache.dev/manual/latest.html#_compiling_in_Difference_directories Compiling in different directories] セクションを参照してください。 |
||
+ | |||
=== キャッシュディレクトリを変更する === |
=== キャッシュディレクトリを変更する === |
||
+ | |||
デフォルトの {{ic|~/.ccache}} ディレクトリから、[[SSD]] や [[fstab#tmpfs|RAM ディスク]]などの高速にアクセス可能な場所にキャッシュディレクトリを移動することができます。 |
デフォルトの {{ic|~/.ccache}} ディレクトリから、[[SSD]] や [[fstab#tmpfs|RAM ディスク]]などの高速にアクセス可能な場所にキャッシュディレクトリを移動することができます。 |
||
− | キャッシュの位置を変更するには: |
+ | キャッシュの位置を変更するには (現在のシェルでのみ有効): |
$ export CCACHE_DIR=/ramdisk/ccache |
$ export CCACHE_DIR=/ramdisk/ccache |
||
+ | |||
+ | あるいは永続的に位置を変更するには: |
||
+ | |||
+ | {{hc|1=/home/''user''/.ccache/ccache.conf| |
||
+ | 2=cache_dir = /ramdisk/ccache}} |
||
+ | |||
+ | === 最大キャッシュ容量の設定 === |
||
+ | |||
+ | デフォルトでは5ギガバイトとなっていますが、多くしたり少なくしたりすることができます: |
||
+ | |||
+ | $ ccache --set-config=max_size=2.0G |
||
=== 環境変数でキャッシュを無効化 === |
=== 環境変数でキャッシュを無効化 === |
||
62行目: | 98行目: | ||
=== CLI === |
=== CLI === |
||
+ | |||
ccache のコマンドラインユーティリティを使うことで以下の操作ができます。 |
ccache のコマンドラインユーティリティを使うことで以下の操作ができます。 |
||
71行目: | 108行目: | ||
=== makechrootpkg === |
=== makechrootpkg === |
||
+ | |||
makechrootpkg で ccache を使うこともできます。makechrootpkg の {{ic|-d}} オプションを使うことで通常の環境から chroot にキャッシュディレクトリをバインドすることが可能です: |
makechrootpkg で ccache を使うこともできます。makechrootpkg の {{ic|-d}} オプションを使うことで通常の環境から chroot にキャッシュディレクトリをバインドすることが可能です: |
||
$ mkdir /path/of/chroot/ccache |
$ mkdir /path/of/chroot/ccache |
||
$ 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 が使われるように設定してください。 |
||
+ | |||
+ | == 注意点 == |
||
+ | |||
+ | ''ccache'' は'''完全に同一の'''ソースをコンパイルする際に'''のみ'''効果的です(より正確には、プリプロセスされたソースに対してです)。 |
||
+ | |||
+ | Gentoo Linux コミュニティでは、ソースベースのディストリビューションであるため、''ccache'' はプラセボ効果やコンパイル失敗(望ましくない残留オブジェクトによる)などで悪名高いです。Gentoo では、コンパイル失敗を報告する前に ''ccache'' をオフにすることが要求されます。[[Gentoo:Handbook:Parts/Working/Features#Caching compilation objects]] および Diego Pettenò(元 Gentoo 開発者)による "Debunking ccache myths" と題されたブログ投稿 [https://flameeyes.blog/2008/06/21/debunking-ccache-myths/ the blog post] を参照してください。 |
||
== 参照 == |
== 参照 == |
||
*[http://ccache.samba.org/manual.html ccache マニュアル] |
*[http://ccache.samba.org/manual.html ccache マニュアル] |
||
+ | |||
+ | {{TranslationStatus|Ccache|2024-05-08|795404}} |
2024年5月8日 (水) 18:38時点における最新版
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=(!distcc color ccache check !sign)
コマンドラインで有効にする
パッケージを作成するのではなく、コマンドラインからコードをコンパイルするとき、ccache
を使うことでコンパイル速度を向上させることができます。
そのためには、各コンパイルコマンドの前に ccache
を付けます。
$ ccache cc hello_world.c
または、コンパイラへのパスの前に ccache のバイナリを含むように $PATH
を変更します:
$ export PATH="/usr/lib/ccache/bin/:$PATH"
この行を定期的に使用するために環境変数として設定することをお勧めします。
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
新しいバージョンの ccache では、GCC_COLORS
が設定されている場合、GCC については常に色を有効にします。Clang についてはデフォルトで色が有効です。出力が TTY でない場合、ccache はコンパイラに色を生成させ、キャッシュに保存しますが、出力からは色を取り除きます。-fdiagnostics-color の統一に関するいくつかの問題が残っています。
その他
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
環境変数でキャッシュを無効化
現在のシェルでのみ 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 を参照してください。