5

CMake を使用して makefile を作成します。CMake は、絶対パスを含む GCC 行を作成します。

コンパイルを高速化するために、ccache を使用します。

異なる場所から同じコードをビルドすると (たとえば、複数の開発者がそれぞれのホーム ディレクトリの下で同じコードをコンパイルする)、ccache キャッシュ ミスが発生します。

4

2 に答える 2

5

上記のコメントで述べたように、1つの問題は、プリプロセッサラインディレクティブの絶対パスがccacheによってハッシュされ、コンパイラオプション-gが使用されている場合、コンパイラはソースコードファイルへの絶対パスも出力することです。別の同様の問題は、ソースコードファイルへのパスがコマンドラインで絶対である場合、コードに__FILE__マクロの展開があるとそのパスがハッシュされることです。

解決策は、数日前にリリースされたccache3.0にアップグレードすることです。ヒット率を上げるために、絶対パスを相対パスに書き換えるオプションのサポートがあります。マニュアルのさまざまなディレクトリでのコンパイルを参照してください。

于 2010-06-23T06:37:29.307 に答える
2

まあ、明白なことを言うと、cmake を取得して相対パスを生成するか、ccache を変更して、唯一の違いが絶対パスである場合にキャッシュ エントリが一致すると見なす必要があります。

-pipeハッシュ (キャッシュ エントリの名前付けに使用される) を計算するときにオプションを無視するように、ccache のコピーを変更しました。そのオプションはコンパイラの出力に違いはなく、速度のみが異なるためです。おそらく、ハッシュを計算するときに最初の /home/*/ をパスから削除するのはそれほど難しくないでしょう。

于 2010-01-05T19:57:24.433 に答える