Chcę użyć pamięci podręcznej, aby przyspieszyć kompilację.
Natknąłem się Jak włączyć pamięć podręczną? .
Oto co dotychczas zrobiłem:
$ 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
Dołączyłem ccache
do ścieżki, dodając ją do mojego ~/.bashrc
pliku:
$ 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
Linki symboliczne wyglądają dobrze:
$ 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*
Link wygląda dobrze:
$ 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
Ale pamięć podręczna jest pusta:
$ 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
Gdzie się mylę?
Odpowiedzi:
Instalacja:
Twoja ścieżka (przynajmniej początek) powinna wyglądać następująco:
I
g++
/gcc
powinien teraz wskazywać na:Konfiguracja:
Jeśli nie chcesz mieć ograniczenia liczby plików i rozmiaru pamięci podręcznej:
Pokaż statystyki pamięci podręcznej:
Opróżnij pamięć podręczną i zresetuj statystyki:
Stosowanie:
Za każdym razem, gdy dzwonisz
gcc
lubg++
;ccache
nazywa się. Mój błąd polegał na tym, że nie usunąłem już skompilowanych plików. Po prostu usuń wszystkieCMake
pliki / wyjściowe i ponownie skonfiguruj / skompiluj.Twój
ccache
nie powinien być pusty. Teraz spróbujmake clean
a,make
a zobaczysz, że jest to znacznie szybsze niż ponowna kompilacja wszystkiego dzięki pamięci podręcznej.źródło
Twój
$PATH
nie wygląda poprawnie;ccache
powinien tam być katalog. Po prostu biegnij:... i spróbuj
g++
ponownie wykonać polecenia. Ten katalog jest pełen wywoływanych poleceń proxyccache
. To powinno działać z większością skryptów.Jeśli po prostu dzwonisz
g++
ręcznie (inaczej niż wyżej, gdzie używasz make), możesz po prostu wstawić polecenie:źródło
$ 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
/usr/lib/ccache/
prostu tego użyj.export PATH="/usr/lib/ccache/:$PATH"
binarnym ccache w/usr/bin
i/usr/bin/X11
. Próbowałem obu tych ścieżek bez powodzenia/usr/lib/ccache/
. Dodać je do swojej drodze tak, że podczasmake
rozmowyg++
lubcc
czy cokolwiek innego, to faktycznie wywołanieccache
wersji wyposażonym w technologię.W odniesieniu do instalacji:
Przekonałem się, że w Ubuntu 18.04 (Bionic Beaver) domyślna wersja nie przechwytuje wywołań
cc
ic++
. Aby w pełni zainstalować tam pamięć podręczną, potrzebujesz:A następnie (ze względu na zaktualizowane dowiązania symboliczne) również połączenia
cc
ic++
daj się złapać!źródło