Comment configurer ccache?

36

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

Je suis tombé sur Comment 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é ccacheau chemin en l'ajoutant à mon ~/.bashrcfichier:

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

Victor Lamoine
la source
J'ai réalisé que cela fonctionne dans le cas général, mais pas avec mon makefile (fonctionne avec cmake par exemple). Donc, je suppose que le problème vient de mon makefile et non de la configuration ccache.
Victor Lamoine

Réponses:

45

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 indiquer:

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 CMakefichiers / output et configurez / compilez à nouveau.

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

Victor Lamoine
la source
Certains comment après avoir suivi cette instruction, ccache ne cache pas clang et clang ++ ...
Wang
4

Votre $PATHne semble pas correct; ccacheLe répertoire de devrait être dedans. Il suffit de courir:

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

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


Si vous appelez simplement g++manuellement (pas comme ci-dessus où vous utilisez make), vous pouvez simplement ajouter la commande:

ccache g++ ...
Oli
la source
Ce répertoire n'existe pas: $ 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
Je lisais un tutoriel Arch. Si tout est juste dans /usr/lib/ccache/juste l'utiliser.
Oli
Cela ne fonctionne pas avec le export PATH="/usr/lib/ccache/:$PATH" binaire ccache est /usr/binet /usr/bin/X11. J'ai essayé avec ces deux chemins sans succès
Victor Lamoine
Mais les commandes de proxy (comme vous l'avez indiqué plus haut) sont toutes présentes /usr/lib/ccache/. Vous ajouter à votre chemin de sorte que lorsque des makeappels g++ou ccou autre, qu'il appelle en fait la ccacheVersion -Enabled.
Oli
Je suis proche parce que le lien pointe maintenant vers ccache (j'ai édité le premier post) mais le cache est toujours vide.
Victor Lamoine
1

Concernant l'installation:

J'ai trouvé que sur Ubuntu 18.04 (Bionic Beaver), la valeur par défaut fournie ne permet pas de saisir les appels de ccet 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 (en raison de liens symboliques mis à jour) appelle également à ccet c++se faire prendre!

Jürgen Weigert
la source