7

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

Makefileを作成する場合、$ {gcc)を提供できますが、Makefileを作成していないため、これはオプションではありません。ソースファイル内の何も変更する必要がないが、ccacheコンパイルを有効にする方法はありますか?

4

3 に答える 3

10

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

なぜあなたがあなた自身に言及した制限のいくつかを課したのか正確にはわかりません:これらのことはうまくいき、あなたは私が理解しているそれらを避ける理由を与えていません。たとえば、autoconfのバージョンが実際に古くない場合は、configureで別のCCを提供することができます。あなたはこれを行うことができます:

./configure CC='ccache gcc'

たとえば、これによりCC、makefileのデフォルト値がに設定されますccache gcc「 CCを要求しない」とはどういう意味かわかりません。

CC必要に応じて、make次のようにコマンドラインでの設定を上書きすることもできます。

make CC='ccache gcc'

これも問題なく動作します。

于 2012-03-18T19:08:11.240 に答える
8

ファインマニュアルで説明されているように:実際のgccを含むディレクトリの前にPATHにリストされているディレクトリに、「gcc」という名前のシンボリックリンクを作成します。これにより、ccacheが透過的に使用され、makefileを変更する必要がなくなります。

于 2012-03-27T16:51:09.753 に答える
2

パッケージ化されたccacheをPATHに追加します

PATH="/usr/lib/ccache:${PATH}" make

これは用途の広い方法であり、次のようになります。

  • すべてのコンパイラで同時に機能します:C、C++など。
  • 可能性のMakefileあるように実際のセットアップにあまり依存しませんCC
  • ccacheあなたが何かを自動化していて、ターゲットユーザーがインストールしていない場合、人々のビルドを壊すことはありません

で言及man ccache

Debianシステムで2番目の方法を使用するには、PATHの前に/ usr / lib/ccacheを追加するのが最も簡単です。/ usr / lib / ccacheには、現在Debianパッケージとしてインストールされているすべてのコンパイラのシンボリックリンクが含まれています。

そして、あなたはそれを次のように確認することができます:

ls -l /usr/lib/ccache

これには、インストールされているクロスコンパイラを含む、多数の可能なGCC名が含まれています。

total 0
lrwxrwxrwx 1 root root 16 May  6 13:51 aarch64-linux-gnu-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 aarch64-linux-gnu-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jun 23 18:25 arm-linux-gnueabi-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 Jun 23 18:25 arm-linux-gnueabi-g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-linux-gnueabi-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-linux-gnueabi-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May 28 22:11 arm-linux-gnueabihf-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May 28 22:11 arm-linux-gnueabihf-gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 arm-none-eabi-gcc-6.3.1 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c89-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 c99-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 cc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 clang -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 clang++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 gcc-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++ -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-g++-7 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-5 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-6 -> ../../bin/ccache
lrwxrwxrwx 1 root root 16 May  6 13:51 x86_64-linux-gnu-gcc-7 -> ../../bin/ccache

Ubuntu16.04でテスト済み。

于 2018-09-14T15:25:55.743 に答える