如何设置ccache?

我想使用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

我通过将ccache添加到我的~/.bashrc文件中的路径来进行了附加。
$ 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

我错在哪里?


我意识到它在一般情况下是有效的,但对于我的makefile却不起作用(例如,对于cmake是有效的)。所以我猜问题出在我的makefile上,而不是ccache的配置上。 - Victor Lamoine
3个回答

安装:

# 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

使用方法:

每次调用gccg++时,都会调用ccache。我的错误在于我没有删除已编译的文件。只需删除所有的CMake/output文件,然后重新配置/编译即可。

这样你的ccache就不会是空的了。现在尝试执行make cleanmake,你会发现它比重新编译所有内容要快得多,这要归功于缓存。


1不知怎么的,在按照这个指示操作后,ccache没有缓存clang和clang++... - Wang

你的 $PATH 看起来不正确;ccache 的目录应该在其中。只需运行:
export PATH="/usr/lib/ccache/:$PATH"

...然后再次尝试您的`g++`命令。这个目录中充满了调用`ccache`的代理命令。这应该适用于大多数脚本。

如果你只是手动调用g++(不像上面你使用make那样),你可以只需在命令前加上:

ccache g++ ...

此目录不存在: $ ls -1 /usr/lib/ccache/ avr-g++ avr-gcc avr-gcc-4.5.3 c++ c89-gcc c99-gcc cc g++ g++-4.6 gcc gcc-4.6 x86_64-linux-gnu-g++ x86_64-linux-gnu-g++-4.6 x86_64-linux-gnu-gcc x86_64-linux-gnu-gcc-4.6 - Victor Lamoine
我正在阅读一个Arch教程。如果所有东西都在/usr/lib/ccache/中,就直接使用它。 - Oli
它与 export PATH="/usr/lib/ccache/:$PATH" 不兼容。ccache 二进制文件在 /usr/bin/usr/bin/X11 中。我尝试了这两个路径,但都没有成功。 - Victor Lamoine
但是代理命令(如上所列)都在/usr/lib/ccache/目录下。你需要将这些命令添加到你的路径中,这样当make调用g++cc等命令时,实际上是调用了启用了ccache的版本。 - Oli
我很接近了,因为链接现在指向了ccache(我编辑了第一篇帖子),但缓存始终为空。 - Victor Lamoine

关于安装:
我发现在Ubuntu 18.04(Bionic Beaver)上,默认的安装不会捕获对cc和c++的调用。要完全安装ccache,您需要:
sudo apt install ccache
sudo /usr/sbin/update-ccache-symlinks
export PATH="/usr/lib/ccache/:$PATH"

然后(由于更新的符号链接),还会捕捉到对ccc++的调用!