GNU Automake é uma ferramenta de programação que produz arquivos makefile portáveis para o uso do programa make, usado na compilação de software. É produzido pela Free Software Foundation como um dos programas GNU, e é parte do GNU build system. Os makefiles produzidos seguem padrões de codificação GNU.
aclocal, entretanto, é um programa de propósito geral que pode ser útil para usuários autoconf. O GNU Compiler Collection, por exemplo, usa aclocal mesmo sendo o makefile escrito manualmente.
Como Autoconf, Automake pode ser difícil de lidar porque ele não é inteiramente compatível com versões anteriores. Por exemplo, um projeto criado com automake 1.4 pode não necessariamente funcionar com automake 1.9.
Enfoque
Automake tenta facilitar o trabalho de escrever um makefile, utilizando linguagem de alto nível, em contraposição de ter de escrever todo o arquivo manualmente. Ele pede:
uma linha que declara o nome do programa a ser construído;
uma lista de arquivos fontes;
uma lista de opções para comandos de linha a serem passados para o compilador (diretórios onde os arquivos podem ser encontrados);
uma lista de opções para comandos de linha a serem passados para o linker (quais bibliotecas o programa utiliza e em que diretórios eles podem ser achados).
Dessa informação, Automake gera um makefile que permite ao usuário:
compilar o programa;
limpar (isto é, remove os arquivos intermediários da compilação);
instala o programa em diretórios padrão;
desinstala o programa de onde ele foi instalado;
cria um arquivo de distribuição de código (comumente chamado um tarball);
testa se esse arquivo é autosuficiente, e em particular se o programa pode ser compilado num diretório outro que não o diretório em que será utilizado.
Geração de dependências
Automake também gera automaticamente as dependências [1], de modo que quando o arquivo fonte é modificado, a próxima invocação do comando make sabe quais os arquivos fonte precisam recompilação. Se o compilador permitir, Automake tenta fazer um sistema dinâmico de dependências: quando o arquivo fonte é compilado, que dependências de arquivos são atualizadas perguntando ao compilador para regenerar a lista de recompilação. Em outras palavras, traceamento de dependências é o efeito colateral de um processo de compilação.
Essa tentativa de evitar o problema com dependências de sistema estáticas, onde as dependências são detectadas somente quando o programador começa a trabalhar no projeto.[2]
Nesse caso, se um arquivo fonte ganha uma nova dependência (por exemplo, se o programador acrescenta uma nova directiva #include em um arquivo fonte C) e, em seguida, é introduzida uma discrepância entre o real dependências e aqueles que são utilizados pelo sistema de compilação . O programador deve, então, regenerar as dependências, mas corre o risco de nos esquecermos de o fazer.
No caso geral, automake gera dependências através da bundled depcomp script, que irá invocar o compilador adequadamente ou retroceder para makedepend. Se o compilador é suficientemente recente versão do gcc, porém, a dependência automake irá inline geração código para chamar o gcc diretamente.
Libtool
Automake pode também ajudar na compilação de bibliotecas gerando automaticamente makefiles que irão invocar o Libtool. O programador é então aliviado de ter de saber como chamar a Libtool diretamente, e o projeto se benefecia do uso de uma ferramenta criação de biblioteca portável.
Saneando o ambiente de construção
Muitos Autoconf configuram scripts de saída com a mensagem "checking whether build environment is sane..." cedo na fase de configuração. Essa mensagem é o resultado de testes feitos pela macro do Automake: AM_SANITY_CHECK. Ela checa se o arquivo criado no diretório de construção é mais novo que o arquivo fonte do diretório de fontes. Pode falhar em sistemas onde o relógio não é ajustado. Essa macro roda automaticamente de AM_INIT_AUTOMAKE.