6

(これは、ccache ホスト マシンでコマンド パスのみを展開しないようにするため、 ccache と絶対パスの質問とは異なります)

ccache と distcc を一緒に使用すると、ccache はコンパイラを絶対パスに展開し、distcc はリモート マシンの PATH を使用して使用するコンパイラを選択できません。

たとえば、私が呼び出すCCACHE_PREFIX=distcc ccache g++ foo.ccと、ccacheはこれをローカルの前処理ステップとキャッシュ チェックに展開distcc /usr/bin/g++し、次に distcc as を呼び出します。これは間違ったバージョンです (g++ は /usr/bin の前のリモートのパスに存在しますが、これはそれを与えませんパスを検索する機会がまったくありません)。

私はさまざまなマシンを distcc ホストとして使用しており、同じバージョンの gcc/g++ が異なる場所にインストールされています (はい、/usr/local のような場所にそれらをすべて配置すると、この問題は解決しますが、できません現時点ではそれを行います)。

g++パスをローカル コンパイラの絶対パスに展開するのではなく、distccだけに渡すように ccache を取得する設定はありますか? まだ設定がない場合、ccache にパッチを適用することに完全に反対しているわけではありませんが、それは最後の手段です :)

4

2 に答える 2

7

これを行うには簡単な方法があることがわかりました。直接ではCCACHE_PREFIXなく、次のdistccようなラッパーを使用するだけです。

ファイル: distcc-wrap.sh

#!/bin/sh
compiler=$(basename $1)
shift
exec distcc "$compiler" "$@"

export CCACHE_PREFIX=distcc-wrap.shこれにより、リモートコンパイラが別の場所に存在できるようになり、distcc は PATH を検索します。

(この回答については、ccache メーリング リストの Joel に感謝します。元のメッセージについては、 http://www.mail-archive.com/ccache@lists.samba.org/msg00670.htmlを参照してください)

于 2011-06-08T12:11:14.580 に答える