Como faço para configurar o ccache?

36

Eu quero usar o ccache para acelerar a compilação.

Me deparei com Como ativar o ccache? .

Isto é o que eu fiz até agora:

$ 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

Anexei ccacheao caminho adicionando-o ao meu ~/.bashrcarquivo:

$ 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

Os links simbólicos parecem bons:

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

O link parece bom:

$ 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

Mas o cache está vazio:

$ 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

Onde eu estou errado?

Victor Lamoine
fonte
Percebi que funciona no caso geral, mas não no meu makefile (funciona com o cmake, por exemplo). Então eu acho que o problema está no meu makefile e não na configuração do ccache.
Victor Lamoine

Respostas:

45

Instalação:

# 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

Seu caminho (pelo menos o começo) deve se parecer com:

/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++/ gccagora deve apontar para:

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

Configuração:

Se você não deseja um limite para o número de arquivos e o tamanho do cache:

ccache -F 0
ccache -M 0

Mostrar estatísticas de cache:

ccache -s

Esvazie o cache e redefina as estatísticas:

ccache -C -z

Uso:

Toda vez que você liga gccou g++; ccacheé chamado. Meu erro foi não excluir os arquivos já compilados. Apenas apague todos os seus CMakearquivos / output e configure / compile novamente.

Você ccachenão deveria estar vazio então. Agora tente um make cleane makeverá que é muito mais rápido do que recompilar tudo graças ao cache.

Victor Lamoine
fonte
de alguma forma depois de seguir esta instrução, ccache não armazena em cache clang e clang ++ ...
Wang
4

O seu $PATHnão parece correto; ccacheO diretório de deve estar lá. Apenas corra:

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

... e tente seus g++comandos novamente. Este diretório está cheio de comandos proxy que chamamccache . Isso deve funcionar com a maioria dos scripts.


Se você está apenas chamando g++manualmente (não como acima, onde está usando o make), basta adicionar o comando:

ccache g++ ...
Oli
fonte
Este diretório não existe: $ 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
Eu estava lendo um tutorial do Arch. Se tudo estiver /usr/lib/ccache/apenas usando isso.
Oli
Ele não funciona com o export PATH="/usr/lib/ccache/:$PATH" ccache, o binário está em /usr/bine /usr/bin/X11. Eu tentei com ambos os caminhos sem sucesso
Victor Lamoine
Mas os comandos de proxy (como você já listadas acima) estão todos em /usr/lib/ccache/. Você adicioná-los para o seu caminho de modo que quando makechamadas g++ou ccou qualquer outra coisa, é realmente chamar a ccacheversão habilitado.
Oli
Estou perto porque o link agora aponta para o ccache (editei o primeiro post), mas o cache está sempre vazio.
Victor Lamoine
1

Em relação à instalação:

Eu descobri que no Ubuntu 18.04 (Bionic Beaver) o padrão enviado não captura invocações de cce c++. Para instalar o ccache completamente lá, você precisa:

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

E então (devido aos links simbólicos atualizados) também chama cce c++é pego!

Jürgen Weigert
fonte