4

CCACHE を使用するときに、複数のキャッシュ ディレクトリを使用したり、キャッシュを完全にクリアしたりする実際的な理由は何ですか?

Buildroot BR2_CCACHE 構成オプションのヘルプの説明には、次のように記載されています。

コンパイラが互換性のない方法で変更された場合、Buildroot はキャッシュの内容を無効にしようとしないことに注意してください。したがって、コンパイラのバージョンや構成を変更する場合は、$HOME/.buildroot-ccache ディレクトリを削除して ccache キャッシュを削除する必要があります。

私の理解が正しければ、さまざまなコンパイラ ビルドが CCACHE によって認識され、キャッシュはコンパイラごとに行われます。では、説明が言及している状況とは何ですか?

また、一部の情報源は、キャッシュを定期的にクリアする必要があることを示唆しているようです。キャッシュが「最大キャッシュ サイズ」のしきい値に達すると、キャッシュが自動的にクリーンアップされると指摘する人もいます

明らかに、キャッシュされたデータが破損している場合は、それについて何かをする必要があります。キャッシュをクリアする他の理由はありますか? 単一のキャッシュを保持するのは理にかなっているでしょうか?

4

1 に答える 1

7

主な理由は、buildroot が CCACHE_COMPILERCHECK 変数を「none」に設定するためです。Buildroot の ccache.mk を参照してください。

Buildroot がこれを行うのには正当な理由があります。同じコンパイラ バージョン (gcc 4.8.0 としましょう) を再構築するたびに、ccache の結果がまだ有効であっても、すべて破棄されます。さらに、ツールチェーンの別の部分が変更される可能性があります。これはキャッシュされたファイルにも影響しますが、コンパイラのバージョンが変更されたかどうかを確認しても検出されません。将来的には、ツールチェーンの必要なすべての部分をカバーする広範なチェックが使用される可能性があります。これはまだそうではないようです。

明らかに、これは最適ではありません。コンパイラのバージョンを 4.8 から 4.9 に変更すると、ccache の結果が自動的に消去されるのが理想的です。現時点では、手動で行う必要があります。

于 2015-01-13T06:54:59.583 に答える