Automake
The GNU Project | |
Versão estável | 1.16.5 (3 de outubro de 2021) |
Sistema operacional | Multiplataforma |
Gênero(s) | Ferramenta de programação |
Licença | GPL |
Página oficial | http://sources.redhat.com/automake |
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.
Ele é escrito em linguagem de programação Perl e deve ser usado com o autoconf. Automake contém os seguintes comandos:
- aclocal
- automake
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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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.
Ver também
[editar | editar código-fonte]Referências
- ↑ de dependências Traceamento Automático de Dependências, Manual do Automake
- ↑ Dependency Tracking in Automake, Automake Manual
- Gary V. Vaughan, Ben Elliston, Tom Tromey: Gnu Autoconf, Automake, and Libtool, Sams, ISBN 1-57870-190-2
Ligações externas
[editar | editar código-fonte]- Automake home page
- Versão online de The Goat Book, também chamado, Autobook
- Tutorial "Aprendendo Autoconf e Automake" por Eleftherios Gkioulekas
- Tutorial para inciantes "Autotools Tutorial" por Sarah George
- Artigo "Usando Automake e Autoconf com C++" por Murray Cumming
- Autotoolset home page
- The "Autotools Tutorial" by Alexandre Duret-Lutz introduz Autoconf, Automake, Libtool, e Gettext.
- Aprendendo as ferramentas de desenvolvimento GNU