コンパイラへの入力をキャッシュすることで、コンパイルの高速化を行います。
ccache をインストールします。
例えば、cygwin の場合、
ccache パッケージをインストールすると
/usr/bin/ccache
に ccache コマンドがインストールされているはずです。
ccache を利用するには2通りの方法があります。
1つ目の方法は ccache のパラメータとしてキャッシュを適用したいコマンドを与える方法。
この方法は、通常利用しているコマンドの前に ccache と書き加えるだけで OK です。
例えば以下のようにして利用します。
2つ目の方法は、キャッシュを適用したいコマンド名で ccache のシンボリックリンクを作成する方法です。
ただし、このシンボリックリンクはキャッシュを適用したいコマンドと同じ場所には作成できないので
/usr/lib/ccache
等の ccache 専用のディレクトリを掘り、そこの作成すると良いでしょう。
Debian の場合 ccache パッケージをインストールした時点で、
既に、このディレクトリの下に一通りのシンボリックリンクが作成されています。
任意のコンパイラに対して ccache を経由させたい場合、
例えば gcc や g++ にキャッシュを行いたい場合であれば、
次のようなシンボリックリンクを作成します。
あとは、このコマンドを用いて普段通りコンパイルを行うだけです。
例えば以下のようにして利用します。
ccache がキャッシュ対象のコマンドをどこから検索するかという点には注意が必要です。
何も指示をしないと ccache は環境変数 PATH で指定されたパスから同名のコマンドを探します。
ここで ccache のシンボリックリンクを環境変数 PATH で指定したパスの中に配置していた場合、
特定の環境(少なくとも 2011-12-31 時点の cygwin)においては問題が生じます。
PATH を検索して ccache へのシンボリックリンクが最初に見つかる場合、
ccache は自分自身へのシンボリックリンクを延々とたどり続けてしまうため、
目的のコマンドにたどり着けず無限ループに陥ってしまいます。
逆に目的のコマンドが最初に見つかる場合、そもそも ccache を経由しません。
逆にこの状態でも問題なく動作する環境もあって、
少なくとも、2011-12-31 時点の Debian ではこの問題は生じていません。
とりあえず、この問題が生じる場合 ccache を経由させるために
毎回フルパスで ccache のシンボリックリンクを指定する必要が生じるため
使い勝手が良くありません。
そこで、もしも環境変数 PATH とは別の場所から ccache にキャッシュ対象のコマンドを検索させたい場合は
環境変数 CCACHE_PATH にパスを指定しておきます。
例えば、以下のように環境変数を設定しておけば、
ccache を経由しつつ、いつも通りにコマンドを指定することが可能です。
例えば、cygwin の場合、
ccache パッケージをインストールすると
/usr/bin/ccache
に ccache コマンドがインストールされているはずです。
ccache を利用するには2通りの方法があります。
1つ目の方法は ccache のパラメータとしてキャッシュを適用したいコマンドを与える方法。
この方法は、通常利用しているコマンドの前に ccache と書き加えるだけで OK です。
例えば以下のようにして利用します。
ccache gcc hello.c
2つ目の方法は、キャッシュを適用したいコマンド名で ccache のシンボリックリンクを作成する方法です。
ただし、このシンボリックリンクはキャッシュを適用したいコマンドと同じ場所には作成できないので
/usr/lib/ccache
等の ccache 専用のディレクトリを掘り、そこの作成すると良いでしょう。
Debian の場合 ccache パッケージをインストールした時点で、
既に、このディレクトリの下に一通りのシンボリックリンクが作成されています。
任意のコンパイラに対して ccache を経由させたい場合、
例えば gcc や g++ にキャッシュを行いたい場合であれば、
次のようなシンボリックリンクを作成します。
mkdir -p /usr/lib/ccache ln -s ../../bin/ccache.exe /usr/lib/ccache/gcc ln -s ../../bin/ccache.exe /usr/lib/ccache/g++
あとは、このコマンドを用いて普段通りコンパイルを行うだけです。
例えば以下のようにして利用します。
/usr/lib/ccache/gcc hello.c
ccache がキャッシュ対象のコマンドをどこから検索するかという点には注意が必要です。
何も指示をしないと ccache は環境変数 PATH で指定されたパスから同名のコマンドを探します。
ここで ccache のシンボリックリンクを環境変数 PATH で指定したパスの中に配置していた場合、
特定の環境(少なくとも 2011-12-31 時点の cygwin)においては問題が生じます。
PATH を検索して ccache へのシンボリックリンクが最初に見つかる場合、
ccache は自分自身へのシンボリックリンクを延々とたどり続けてしまうため、
目的のコマンドにたどり着けず無限ループに陥ってしまいます。
逆に目的のコマンドが最初に見つかる場合、そもそも ccache を経由しません。
逆にこの状態でも問題なく動作する環境もあって、
少なくとも、2011-12-31 時点の Debian ではこの問題は生じていません。
とりあえず、この問題が生じる場合 ccache を経由させるために
毎回フルパスで ccache のシンボリックリンクを指定する必要が生じるため
使い勝手が良くありません。
そこで、もしも環境変数 PATH とは別の場所から ccache にキャッシュ対象のコマンドを検索させたい場合は
環境変数 CCACHE_PATH にパスを指定しておきます。
例えば、以下のように環境変数を設定しておけば、
ccache を経由しつつ、いつも通りにコマンドを指定することが可能です。
export CCACHE_PATH=$PATH export PATH=/usr/lib/ccache:$PATH
初回の cmake コマンド実行であれば、以下のようにすれば OK です。
既に一度 cmake コマンドを実行してしまっている場合は、
CMakeCache.txt を削除すれば、上記のやり方でコンパイラを指定し直すことができます。
cmake の設定を維持したまま、コンパイラのみを変更する場合は
以下の2つのパラメータを変更します。
CC=/usr/lib/ccache/gcc CXX=/usr/lib/ccache/g++ cmake .「.」には CMakeList.txt が配置されているディレクトリを指定します(この例の場合カレントディレクトリ)。
既に一度 cmake コマンドを実行してしまっている場合は、
CMakeCache.txt を削除すれば、上記のやり方でコンパイラを指定し直すことができます。
cmake の設定を維持したまま、コンパイラのみを変更する場合は
以下の2つのパラメータを変更します。
- CMAKE_C_COMPILER
- CMAKE_CXX_COMPILER
cmake -D CMAKE_C_COMPILER="/usr/lib/ccache/gcc" -D CMAKE_CXX_COMPILER="/usr/lib/ccache/g++" .対話モードで行う場合は
make edit_cacheとした後、対話画面で「t」キーを叩き advanced mode へ移行することで変更が可能です。
タグ
コメントをかく