Bagaimana cara mengatur ccache?

36

Saya ingin menggunakan ccache untuk mempercepat kompilasi.

Saya menemukan Bagaimana cara mengaktifkan ccache? .

Inilah yang telah saya lakukan sejauh ini:

$ 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

Saya menambahkan ccacheke jalur dengan menambahkannya ke ~/.bashrcfile saya :

$ 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

Tautan simbolis terlihat baik-baik saja:

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

Tautannya terlihat bagus:

$ 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

Tetapi cache kosong:

$ 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

Dimana saya salah

Victor Lamoine
sumber
Saya menyadari itu berfungsi dalam kasus umum tetapi tidak dengan makefile saya (bekerja dengan cmake misalnya). Jadi saya kira masalahnya ada di makefile saya dan bukan di konfigurasi ccache.
Victor Lamoine

Jawaban:

45

Instalasi:

# 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

Jalan Anda (setidaknya awal) akan terlihat seperti:

/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

Dan g++/ gccsekarang harus menunjuk ke:

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

Konfigurasi:

Jika Anda tidak ingin membatasi jumlah file dan ukuran cache:

ccache -F 0
ccache -M 0

Tampilkan statistik cache:

ccache -s

Kosongkan cache dan setel ulang statistik:

ccache -C -z

Pemakaian:

Setiap kali Anda menelepon gccatau g++; ccachedisebut. Kesalahan saya adalah saya tidak menghapus file yang sudah dikompilasi. Hapus saja semua CMakefile / output Anda dan konfigurasikan / kompilasi lagi.

Anda ccachetidak boleh kosong kalau begitu. Sekarang coba a make cleandan makedan Anda akan melihatnya jauh lebih cepat daripada mengkompilasi ulang semuanya berkat cache.

Victor Lamoine
sumber
beberapa cara setelah mengikuti instruksi ini, ccache tidak cache berdentang dan berdentang ++ ...
Wang
4

Anda $PATHtidak terlihat benar; ccacheDirektori harus ada di sana. Lari saja:

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

... dan coba g++perintah Anda lagi. Direktori ini penuh dengan perintah proxy yang memanggil ccache. Ini harus bekerja dengan sebagian besar skrip.


Jika Anda hanya menelepon g++secara manual (tidak seperti di atas tempat Anda menggunakan make), Anda bisa menambahkan dulu perintah:

ccache g++ ...
Oli
sumber
Direktori ini tidak ada: $ 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
Saya sedang membaca tutorial Arch. Jika semuanya /usr/lib/ccache/hanya gunakan saja.
Oli
Tidak berfungsi dengan export PATH="/usr/lib/ccache/:$PATH" ccache binary di /usr/bindan /usr/bin/X11. Saya mencoba dengan kedua jalan ini tanpa hasil
Victor Lamoine
Tetapi perintah proksi (seperti yang Anda sebutkan di atas) semuanya ada di /usr/lib/ccache/. Anda menambahkan ini ke jalur Anda sehingga ketika makepanggilan g++atau ccatau apa pun, itu benar-benar memanggil ccacheversi berkemampuan.
Oli
Saya dekat karena tautannya sekarang menunjuk ke ccache (saya mengedit posting pertama) tetapi cache selalu kosong.
Victor Lamoine
1

Mengenai instalasi:

Saya telah menemukan bahwa di Ubuntu 18.04 (Bionic Beaver) default yang dikirim tidak menangkap doa ccdan c++. Untuk menginstal ccache sepenuhnya di sana, Anda perlu:

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

Dan kemudian (karena symlink yang diperbarui) juga memanggil ccdan c++tertangkap!

Jürgen Weigert
sumber