ccache (Português)
ccache é uma ferramenta para o compilador gcc usada para compilar o mesmo programa repetidas vezes com pouco tempo de inatividade. Enquanto pode levar alguns segundos mais para compilar um programa na primeira vez com o ccache, compilações subsequentes serão muito, muito mais rápidos.
Instalação
Configuração
O comportamento padrão pode ser sobrescrito pelos arquivos de configuração. Prioridade das configurações é a seguinte (sendo 1 o mais alto):
- Variáveis de ambiente
- Arquivo de configuração específico do cache (
$HOME/.ccache/ccache.conf
) - Arquivo de configuração para todo sistema (
/etc/ccache.conf
)
Veja ccache(1) para detalhes.
Habilitar ccache para makepkg
Para habilitar o ccache ao usar makepkg, edite /etc/makepkg.conf
. Em BUILDENV
, descomente ccache
(remova a marca de exclamação) para habilitar cache. Por exemplo:
/etc/makepkg.conf
BUILDENV=(!distcc color ccache check !sign)
Habilitar para linha de comando
Se você está compilando seu código a partir da linha de comando, e não compilando pacotes, então você ainda desejará usar ccache para ajudar a acelerar as coisas.
Para isso, você pode prefixar cada comando de compilação com ccache
.
$ ccache cc hello_world.c
Alternativamente, altere seu $PATH
para incluir os binários do ccache antes do caminho de seu compilador:
$ export PATH="/usr/lib/ccache/bin/:$PATH"
Você pode querer definir essa linha como variável de ambiente para uso regular.
Habilitar com colorgcc
Já que colorgcc também um wrapper de compilador, precisa-se ter alguns cuidados para garantir que cada wrapper é chamado na sequência correta.
export PATH="/usr/lib/colorgcc/bin/:$PATH" # De acordo com a instalação usual de colorgcc, deixe inalterado (não adicione ccache) export CCACHE_PATH="/usr/bin" # Fale para o ccache usar apenas compiladores aqui
Então, o colorgcc precisa ser informado para chamar ccache em vez do compilador real. Edite /etc/colorgcc/colorgccrc
e altere os caminhos de /usr/bin
para /usr/lib/ccache/bin
para todos os compiladores em /usr/lib/ccache/bin
:
/etc/colorgcc/colorgccrc
g++: /usr/lib/ccache/bin/g++ gcc: /usr/lib/ccache/bin/gcc c++: /usr/lib/ccache/bin/g++ cc: /usr/lib/ccache/bin/cc g77:/usr/bin/g77 f77:/usr/bin/g77 gcj:/usr/bin/gcj
As versões mais recentes do ccache sempre habilitarão cores para o GCC quando GCC_COLORS
estiver definido. A cor está ativada para Clang por padrão. Se a saída não for um TTY, o ccache solicitará que o compilador gere cores, armazenando-as no cache, mas removendo-as da saída. Ainda existe algum problema na unificação -fdiagnostics-color.
Diversos
Sloppiness
Por padrão, o ccache usa uma comparação muito conservadora que minimiza os falsos positivos e, em alguns projetos, os verdadeiros positivos. Algumas das comparações são consideradas inúteis e podem ser alteradas:
$ ccache --set-config=sloppiness=file_macro,locale,time_macros
Isso indica ao ccache para ignorar as __FILE__
e macros relacionadas ao tempo, que geralmente invalidam o cache e são consideradas prejudiciais em construções reproduzíveis de qualquer maneira. As diferenças de localidade também são ignoradas. O ccache se preocupa com isso principalmente porque determina o idioma das mensagens de diagnóstico.
A variável de ambiente CCACHE_SLOPPINESS
pode ser exportada para substituir qualquer configuração de "sloppiness" pré-existente.
Por padrão, o ccache também armazena em cache o diretório atual que está sendo usado para cada compilação, o que significa falhas de cache para pipelines de compilação que usam um novo diretório temporário aleatório toda vez que é chamado. Consulte a seção Compiling in different directories do manual do ccache.
Alterar o diretório do cache
Você pode querer mover o diretório cache para uma localização mais rápida do que o diretório ~/.ccache
padrão, como um SSD ou um ramdisk.
Para alterar a localização do cacho apenas no shell atual:
$ export CCACHE_DIR=/ramdisk/ccache
Ou para alterar a localização por padrão:
/home/user/.ccache/ccache.conf
cache_dir = /ramdisk/ccache
Configurar o tamanho máximo do cache
O valor padrão é 5 gigabyte, porém é possível usar um valor menor ou até mesmo mais alto:
$ ccache --set-config=max_size=2.0G
Desabilitar o cacho via ambiente
Se você deseja desabilitar o ccache apenas no shell atual:
$ export CCACHE_DISABLE=1
CLI
Você pode usar o utilitário de linha de comando ccache para mostrar um resumo de estatística:
$ ccache -s
ou limpar o cache completamente:
$ ccache -C
makechrootpkg
Também é possível usar o ccache com makechrootpkg do pacote devtools. Para reter o cache quando o chroot é limpado pelo makechrootpkg, a opção -d
pode ser usada para vincular o diretório do cache do sistema regular para o chroot, ex.:
$ mkdir /path/of/chroot/ccache $ makechrootpkg -d /caminho/para/cache/:/ccache -r /caminho/do/chroot -- CCACHE_DIR=/ccache
Então, ccache pode ser configurado para o chroot na mesma forma como explicado acima para o sistema comum.
Advertência
ccache é efetivo somente quando compilar fontes exatamente idênticas. (mais especificamente, fontes pré-processadas.)
Na comunidade Gentoo Linux, uma distro baseada em fontes, ccache tem sido notório por seu efeito placebo, falha de compilação (devido a objetos indesejados), etc. O Gentoo exige que seja desligado o ccache antes de relatar falha de compilação. Veja a seção ccache no Manual do Gentoo Linux, e a publicação de blog intitulado "Debunking ccache myths" por Diego Pettenò, um ex-desenvolvedor Gentoo.