Come si configura ccache?


36

Voglio usare ccache per velocizzare la compilazione.

Mi sono imbattuto Come abilitare ccache? .

Questo è quello che ho fatto finora:

$ 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

Ho aggiunto ccacheil percorso aggiungendolo al mio ~/.bashrcfile:

$ 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

I collegamenti simbolici sembrano a posto:

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

Il link sembra buono:

$ 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

Ma la cache è vuota:

$ 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

Dove sbaglio?


Mi sono reso conto che funziona nel caso generale ma non con il mio makefile (ad esempio funziona con cmake). Quindi immagino che il problema sia nel mio makefile e non nella configurazione di ccache.
Victor Lamoine,

Risposte:


45

Installazione:

# 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

Il tuo percorso (almeno all'inizio) dovrebbe apparire come:

/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

E g++/ gccdovrebbe ora indicare:

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

Configurazione:

Se non si desidera alcun limite al numero di file e alle dimensioni della cache:

ccache -F 0
ccache -M 0

Mostra statistiche cache:

ccache -s

Svuota la cache e reimposta le statistiche:

ccache -C -z

Uso:

Ogni volta che chiami gcco g++; ccacheè chiamato. Il mio errore è stato che non ho eliminato i file già compilati. Elimina semplicemente tutti i tuoi CMakefile / output e configura / compila nuovamente.

Il tuo ccachenon deve essere vuoto allora. Ora prova a make cleane makevedrai che è molto più veloce che ricompilare tutto grazie alla cache.


alcuni come dopo aver seguito queste istruzioni, ccache non memorizza nella cache clang e clang ++ ...
Wang

4

Il tuo $PATHnon sembra corretto; ccacheLa directory di dovrebbe essere lì dentro. Corri:

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

... e prova di g++nuovo i tuoi comandi. Questa directory è piena di comandi proxy che chiamano ccache. Questo dovrebbe funzionare con la maggior parte degli script.


Se stai solo chiamando g++manualmente (non come sopra dove stai usando make), puoi semplicemente anteporre il comando:

ccache g++ ...

Questa directory non esiste: $ 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,

Stavo leggendo un tutorial di Arch. Se tutto è solo per /usr/lib/ccache/usarlo.
Oli

Non funziona con export PATH="/usr/lib/ccache/:$PATH" ccache binary is in /usr/bine /usr/bin/X11. Ho provato con entrambi questi percorsi senza successo
Victor Lamoine

Ma i comandi proxy (come hai elencato sopra) sono tutti presenti /usr/lib/ccache/. Si aggiungono questi per il vostro percorso in modo che quando makele chiamate g++o di cco qualsiasi altra cosa, in realtà è chiamare la ccacheversione -enabled.
Oli

Sono vicino perché il link ora punta a ccache (ho modificato il primo post) ma la cache è sempre vuota.
Victor Lamoine,

1

Per quanto riguarda l'installazione:

Ho scoperto che su Ubuntu 18.04 (Bionic Beaver) l'impostazione predefinita fornita non cattura le invocazioni di cce c++. Per installare ccache completamente lì, è necessario:

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

E poi (a causa di collegamenti simbolici aggiornati) chiama anche cce fatti c++prendere!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.