2012-03-18 11 views
2

私はmakefileを使ってコードをコンパイルするソースディレクトリを持っています。このmakefile/configureファイルは、ccacheとの互換性のために書かれていません。だから私はccacheを使うと思った。 .bashrcにエイリアスをalias gcc='ccache gcc'として作成しましたが、Makefileはgccのこの定義をまだ考慮していません。だからgccの代わりにccache gccとなるようにMakefile/configureファイルに触れることなくできることがあります。 CC = 'ccache gcc' ./configureはCCを要求しないため、オプションではありません。makeでccacheを使用

私がMakefileを書くと、私は$ {gcc}を提供することができますが、Makefileを書いていないのでこれはオプションではありません。ソースファイルで何も変更する必要はありませんが、それでもccacheをコンパイルできるようにする方法はありますか?

+0

さて、Makefileはコンパイルに何を使用しますか? '$(CC)'ではなく 'gcc'を使うようにハードコーディングされていますか? –

+0

Makefileはconfigureによって作成され、autoconfによって作成されます。makefileはconfigure.inを解析します。しかし、これを変更することで "configure file has changed"という別の問題が発生するので、ソースファイル(makefile/configure)に変更を加えることなくその方法を探していました。 – peeyush

答えて

5

説明:the fine manual:実際のgccを含む前にPATHにリストされているディレクトリに "gcc"というシンボリックリンクを作成します。これにより、ccacheは透過的に使用され、メークファイルへの変更は必要ありません。

7

エイリアスは、作成されるシェルにとってローカルです。環境変数とは異なり、シェルが起動するプログラム(makeを含む)には渡されません。/bin/shではなく/ bin/shを呼び出すと、〜/ .bashrcなどが読み込まれないので、そこに定義されている別名は役に立ちません。

あなたが自分で言及している制限のいくつかをなぜ配置したのか正確にはわかりません。これらはうまく動作し、理解できない理由を与えていません。たとえば、autoconfのバージョンが本当に古くない場合は、と異なるCCを提供するとが動作します。例えば

./configure CC='ccache gcc' 

それはccache gccであるためにあなたのメイクファイルにCCのデフォルト値を設定します:あなたはこれを行うことができます。私はあなたが "それはCCを求めていない"という意味を知らない。また、正常に動作します

make CC='ccache gcc' 

:あなたが希望した場合

、あなたはまた、このようなmakeコマンドラインでCCの設定を上書きすることができます。

+0

これは既にCCオプションが設定ではないことを言及しました。 gccはハードコーディングされています。つまり、configureスクリプトはCC変数を検索しません。 – peeyush

+2

C++コードを使用している場合は、CXX = 'ccache g ++'を指定することを忘れないでください。 – relascope

関連する問題