É explicado como:
Ccache é um cache de compilador. Ele acelera a recompilação armazenando em cache compilações anteriores e detectando quando a mesma compilação está sendo executada novamente.
Não entendi. Quando uso um sistema de compilação como Ninja ou Makefiles e, por exemplo, altero um arquivo-fonte, o sistema de compilação já registra quais arquivos são dependências de quais unidades de tradução e evita recompilar essas unidades de tradução com base nessas informações, o que, até onde sei, eu descreveria como cache. Além disso, notei que, quando altero uma unidade de tradução, ele não apenas evita recompilar todas as unidades de tradução em arquivos-objeto novamente, mas também, de alguma forma (não sei como), evita vincular tudo novamente ao executável, de modo que, em um projeto muito grande, posso alterar o código em uma unidade de tradução, recompilar e tudo estará pronto para ser executado novamente em 2 segundos no meu rápido computador multi-core.
O que o ccache faz além disso, explique com exemplos concretos como "ele armazena em cache partes x, y, z do seu código".
Até onde eu entendi, o ccache é capaz de lembrar e identificar múltiplas versões da mesma unidade de compilação, enquanto o make normal consegue identificar apenas uma através do registro de data e hora.
Por exemplo, você faz uma pequena modificação (por exemplo, altera o formato de uma
std::cout
chamada) e compila:Tudo até aqui parece igual.
Aí você testa e decide reverter as alterações e compilar novamente.
O make normal omite apenas arquivos que não tiveram alterações desde a última compilação.
make
é antigo. Ele não entende o que as regras fazem. Ele apenas as segue para criar "alvos". Como resultado, ele não consegue realmente fazer cache. Ele precisa de bastante ajuda para descobrir dependências entre arquivos e não entende as configurações do compilador. Como resultado, ele mantém apenas um.o
arquivo para cada.c
arquivo, a menos que você tenha vários diretórios de compilação (que você precisa gerenciar manualmente).ccache
entende melhor o que está fazendo, pois é uma ferramenta com uma tarefa mais específica. Ela pode manter mais de um.o
arquivo para um.c
arquivo, dependendo das configurações do compilador e das definições do pré-processador.Ao
ccache
cuidar do cache, você pode dizermake
para pular o cache primitivo por meio de.PHONY
.make
, que sempre pediráccache
para "reconstruir" o.o
, mas isso geralmente é apenas uma consulta rápida.