ccache (Português)

From ArchWiki

Status de tradução: Esse artigo é uma tradução de Ccache. Data da última tradução: 2020-07-02. Você pode ajudar a sincronizar a tradução, se houver alterações na versão em inglê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

Instale o pacote ccache.

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):

  1. Variáveis de ambiente
  2. Arquivo de configuração específico do cache ($HOME/.ccache/ccache.conf)
  3. 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.

Nota: Tal exportação inevitavelmente habilitará ccache para makepkg da mesma forma que se fosse chamado com esse PATH.

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.

Veja também