Jump to content
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.

Artigos relacionados

- Makepkg
- Distcc

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

- manual do ccache

Category:

- Package development (Português)