web-dev-qa-db-fra.com

Comment configurer ccache?

Je veux utiliser ccache pour accélérer la compilation.

Je suis tombé sur Comment puis-je activer ccache?.

Voici ce que j'ai fait jusqu'à présent:

$ 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

J'ai ajouté ccache au chemin en l'ajoutant à mon fichier ~/.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

Les liens symboliques ont l'air 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*

Le lien a l'air 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

Mais la cache est vide:

$ 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

Où est-ce que je me trompe?

35
Victor Lamoine

Installation:

# 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

Votre chemin (au moins le début) devrait ressembler à:

/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

Et g++/gccdevrait maintenant pointer vers:

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

Configuration:

Si vous voulez aucune limite au nombre de fichiers et à la taille du cache:

ccache -F 0
ccache -M 0

Afficher les statistiques du cache:

ccache -s

Videz le cache et réinitialisez les statistiques:

ccache -C -z

Usage:

Chaque fois que vous appelez gccou g++; ccacheest appelé. Mon erreur est que je n'ai pas supprimé les fichiers déjà compilés. Supprimez simplement tous vos fichiers CMakename __/output et configurez/compilez à nouveau.

Votre ccachene devrait pas être vide alors. Maintenant, essayez un make clean et un makeet vous verrez que c'est beaucoup plus rapide que de tout recompiler grâce au cache.

43
Victor Lamoine

Votre $PATH ne semble pas correct; Le répertoire ccache devrait y être. Il suffit de courir:

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

... et essayez à nouveau vos commandes g++. Ce répertoire est plein de commandes de proxy qui appellent ccache. Cela devrait fonctionner avec la plupart des scripts.


Si vous appelez simplement g++ manuellement (contrairement à make où vous utilisez make), vous pouvez juste ajouter la commande:

ccache g++ ...
4
Oli

Concernant l'installation:

J'ai trouvé que sur buntu 18.04 (Bionic Beaver), la valeur par défaut fournie ne permet pas de saisir les invocations de cc et c++. Pour y installer complètement ccache, il vous faut:

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

Et puis (à cause des liens symboliques mis à jour), les appels à cc et c++ sont également interceptés!

1
Jürgen Weigert