Wie richte ich den Ccache ein?

36

Ich möchte Ccache verwenden , um die Kompilierung zu beschleunigen.

Ich bin auf Folgendes gestoßen: Wie aktiviere ich den Ccache? .

Das habe ich bisher gemacht:

$ 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

Ich ccachehabe den Pfad angehängt , indem ich ihn meiner ~/.bashrcDatei hinzugefügt habe :

$ 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

Die symbolischen Links sehen gut aus:

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

Der Link sieht gut aus:

$ 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

Der Cache ist aber leer:

$ 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

Wo irre ich mich

Victor Lamoine
quelle
Ich habe festgestellt, dass es im allgemeinen Fall funktioniert, aber nicht mit meinem Makefile (funktioniert zum Beispiel mit cmake). Ich vermute, das Problem liegt in meinem Makefile und nicht in der Ccache-Konfiguration.
Victor Lamoine

Antworten:

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

Dein Weg (zumindest der Anfang) sollte so aussehen:

/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

Und g++/ gccsollte jetzt zeigen:

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

Aufbau:

Wenn Sie die Anzahl der Dateien und die Größe des Caches nicht beschränken möchten:

ccache -F 0
ccache -M 0

Cache-Statistiken anzeigen:

ccache -s

Leere den Cache und setze die Statistiken zurück:

ccache -C -z

Verwendung:

Bei jedem Anruf gccoder g++; ccachewird genannt. Mein Fehler war, dass ich bereits kompilierte Dateien nicht gelöscht habe. Löschen Sie einfach alle Ihre CMake/ output-Dateien und konfigurieren / kompilieren Sie sie erneut.

Du ccachesolltest dann nicht leer sein. Versuchen Sie nun ein make cleanund makeund Sie werden sehen, dass es dank des Cache viel schneller ist, als alles neu zu kompilieren.

Victor Lamoine
quelle
Einige, wie nach Befolgung dieser Anweisung, ccache nicht zwischenspeichern klirrend und klirrend ++ ...
Wang
4

Du $PATHsiehst nicht richtig aus; ccacheDas Verzeichnis von sollte sich dort befinden. Renn einfach:

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

... und versuchen Sie es g++erneut. Dieses Verzeichnis ist voll von Proxy-Befehlen, die aufgerufen werden ccache. Dies sollte mit den meisten Skripten funktionieren.


Wenn Sie nur g++manuell anrufen (nicht wie oben, wo Sie make verwenden), können Sie einfach den Befehl voranstellen:

ccache g++ ...
Oli
quelle
Dieses Verzeichnis existiert nicht: $ 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
Ich habe ein Arch-Tutorial gelesen. Wenn alles in Ordnung ist, /usr/lib/ccache/benutze das einfach.
Oli
Es funktioniert nicht mit export PATH="/usr/lib/ccache/:$PATH" ccache binary in /usr/binund /usr/bin/X11. Ich habe es mit beiden Wegen erfolglos versucht
Victor Lamoine
Aber die Proxy-Befehle (wie Sie oben aufgeführt haben) sind alle in /usr/lib/ccache/. Sie fügen diese so auf Ihren Weg, wenn makeAnrufe g++oder ccoder was auch immer, es ist eigentlich die anruf ccache-fähigen Version.
Oli
Ich bin nah dran, weil der Link jetzt auf ccache zeigt (ich habe den ersten Beitrag bearbeitet), aber der Cache ist immer leer.
Victor Lamoine
1

In Bezug auf die Installation:

Ich habe festgestellt, dass bei Ubuntu 18.04 (Bionic Beaver) die Standardeinstellung keine Aufrufe von ccund abfängt c++. Um ccache dort vollständig zu installieren, benötigen Sie:

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

Und dann (wegen aktualisierter Symlinks) auch noch anrufen ccund c++erwischt werden!

Jürgen Weigert
quelle