¿Cómo configuro ccache?

36

Quiero usar ccache para acelerar la compilación.

Encontré ¿Cómo habilito ccache? .

Esto es lo que he hecho hasta ahora:

$ 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

Agregué ccachea la ruta agregándola a mi ~/.bashrcarchivo:

$ 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

Los enlaces simbólicos se ven bien:

$ 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*

El enlace se ve bien:

$ 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

Pero el caché está vacío:

$ 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

Donde me equivoco

Victor Lamoine
fuente
Me di cuenta de que funciona en el caso general pero no con mi archivo MAKE (funciona con cmake, por ejemplo). Así que supongo que el problema está en mi archivo MAKE y no en la configuración de ccache.
Victor Lamoine

Respuestas:

45

Instalación:

# 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

Su camino (al menos el principio) debería verse así:

/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

Y g++/ gccahora debe apuntar a:

which g++ gcc
/usr/lib/ccache/g++
/usr/lib/ccache/gcc

Configuración:

Si no desea limitar la cantidad de archivos y el tamaño de la memoria caché:

ccache -F 0
ccache -M 0

Mostrar estadísticas de caché:

ccache -s

Vacíe el caché y restablezca las estadísticas:

ccache -C -z

Uso:

Cada vez que llamas gcco g++; ccachese llama. Mi error fue que no eliminé los archivos ya compilados. Simplemente elimine todos sus CMakearchivos / output y configure / compile nuevamente.

No ccachedeberías estar vacío entonces. Ahora trata de un make cleane makey verá que es mucho más rápido que volver a compilar todo gracias a la caché.

Victor Lamoine
fuente
de alguna manera, después de seguir estas instrucciones, ccache no almacena en caché clang y clang ++ ...
Wang
4

Tu $PATHno parece correcto; ccacheEl directorio debe estar allí. Solo corre:

export PATH="/usr/lib/ccache/:$PATH"

... e intente g++nuevamente sus comandos. Este directorio está lleno de comandos proxy que llaman ccache. Esto debería funcionar con la mayoría de los scripts.


Si solo está llamando de forma g++manual (no como arriba donde está usando make), puede anteponer el comando:

ccache g++ ...
Oli
fuente
Este directorio no existe: $ 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
Estaba leyendo un tutorial de Arch. Si todo está en /usr/lib/ccache/solo usar eso.
Oli
No funciona con export PATH="/usr/lib/ccache/:$PATH" ccache binary está en /usr/biny /usr/bin/X11. Intenté con estos dos caminos sin éxito
Victor Lamoine
Pero los comandos proxy (como has enumerado anteriormente) están todos incluidos /usr/lib/ccache/. Se agrega de inmediato a su trayectoria de modo que cuando makelas llamadas g++o cclo que sea, en realidad está llamando a la ccacheversión habilitado.
Oli
Estoy cerca porque el enlace ahora apunta a ccache (edité la primera publicación) pero el caché siempre está vacío.
Victor Lamoine
1

En cuanto a la instalación:

Descubrí que en Ubuntu 18.04 (Bionic Beaver) el valor predeterminado enviado no capta las invocaciones de ccy c++. Para instalar completamente ccache allí, necesita:

sudo apt install ccache
sudo /usr/sbin/update-ccache-symlinks
export PATH="/usr/lib/ccache/:$PATH"

¡Y luego (debido a enlaces simbólicos actualizados) también llama ccy c++queda atrapado!

Jürgen Weigert
fuente