ccache を使用してコンパイルを高速化したい。
私はccacheを有効にする方法に出会いました。
これは私がこれまでにやったことです:
$ Sudo apt-get install -y ccache
$ dpkg -l ccache
ii ccache 3.1.6-1 Compiler cache for fast recompilation of C/C++ code
$ whereis ccache
ccache: /usr/bin/ccache /usr/lib/ccache /usr/bin/X11/ccache /usr/share/man/man1/ccache.1.gz
~/.bashrc
ファイルに追加して、パスにccache
を追加しました。
$ export PATH="/usr/lib/ccache:$PATH"
$ source ~/.bashrc
$ echo $PATH
/usr/lib/ccache:/usr/local/cuda-5.5/bin/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
シンボリックリンクは正常に見えます。
$ ll /usr/lib/ccache/
total 76
drwxr-xr-x 2 root root 4096 mai 22 10:48 ./
drwxr-xr-x 253 root root 69632 mai 22 10:48 ../
lrwxrwxrwx 1 root root 16 mai 22 10:48 avr-g++ -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 avr-gcc -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 avr-gcc-4.5.3 -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 c++ -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 c89-gcc -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 c99-gcc -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 cc -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 g++ -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 g++-4.6 -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 gcc -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 gcc-4.6 -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 x86_64-linux-gnu-g++ -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 x86_64-linux-gnu-g++-4.6 -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 x86_64-linux-gnu-gcc -> ../../bin/ccache*
lrwxrwxrwx 1 root root 16 mai 22 10:48 x86_64-linux-gnu-gcc-4.6 -> ../../bin/ccache*
リンクは良さそうです:
$ which g++
/usr/lib/ccache/g++
$ make
g++ -o affine_euler affine_euler.cpp -O3 -DEIGEN_NO_DEBUG -I/usr/include/eigen3
g++ -o test_eigen test_eigen.cpp -O3 -DEIGEN_NO_DEBUG -I/usr/include/eigen3
ただし、キャッシュは空です。
$ ccache -s
cache directory /home/Dell/.ccache
cache hit (direct) 0
cache hit (preprocessed) 0
cache miss 0
files in cache 0
cache size 0 Kbytes
max cache size 1.0 Gbytes
私はどこが間違っていますか?
# Install package
Sudo apt install -y ccache
# Update symlinks
Sudo /usr/sbin/update-ccache-symlinks
# Prepend ccache into the PATH
echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc
# Source bashrc to test the new PATH
source ~/.bashrc && echo $PATH
パス(少なくとも最初の部分)は次のようになります。
/usr/lib/ccache:/usr/local/cuda-5.5/bin/:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
そして、g++
/gcc
は以下を指すようになります:
which g++ gcc
/usr/lib/ccache/g++
/usr/lib/ccache/gcc
ファイルの数とキャッシュのサイズを制限しない場合:
ccache -F 0
ccache -M 0
キャッシュ統計を表示する:
ccache -s
キャッシュを空にして、統計をリセットします。
ccache -C -z
gcc
またはg++
;を呼び出すたびにccache
が呼び出されます。私の間違いは、コンパイル済みのファイルを削除しなかったことです。すべてのCMake
/outputファイルを削除して、再度構成/コンパイルします。
ccache
は空にしないでください。 make clean
とmake
を試してみると、キャッシュのおかげですべてを再コンパイルするよりもはるかに高速であることがわかります。
$PATH
が正しく見えません。 ccache
のディレクトリはそこにあるはずです。ただ走れ:
export PATH="/usr/lib/ccache/:$PATH"
... g++
コマンドを再試行します。このディレクトリには、ccache
を呼び出すプロキシコマンドがいっぱいです。これはほとんどのスクリプトで動作するはずです。
g++
を手動で呼び出すだけの場合(makeを使用している場合は上記とは異なります)、コマンドを追加するだけです。
ccache g++ ...
インストールについて:
buntu 18.04 (Bionic Beaver)では、出荷時のデフォルトではcc
およびc++
の呼び出しがキャッチされないことがわかりました。そこにccacheを完全にインストールするには、次のものが必要です。
Sudo apt install ccache
Sudo /usr/sbin/update-ccache-symlinks
export PATH="/usr/lib/ccache/:$PATH"
そして(更新されたシンボリックリンクにより)cc
とc++
への呼び出しもキャッチされます!