Utilizando GNU/Autotools em Projetos

Na elaboração de projetos de software utilizamos várias formas de padronizar a compilação e instalação. Neste artigo vou explicar como montar facilmente um autoconfigurador para sistemas GNU/Linux, onde podemos fazer a checagem das dependências necessárias para compilar nosso projeto.

[ Hits: 7.966 ]

Por: Alcione Ferreira em 26/10/2015 | Blog: http://www.alcionesytes.net


Arquivos configure.ac e Makefile.am



Arquivo configure.ac

Este arquivo é responsável por toda a checagem e nele é especificado o nome do projeto, versão, autor, e-mail para reportar bugs e página do desenvolvedor, além das checagem do compilador, de bibliotecas e arquivos instalados e as saídas que a configuração irá gerar.

Vamos entender sua composição através do exemplo abaixo:

AC_INIT(Projeto, 1.0.0, sombra@alcionesytes.net , projeto , http://www.alcionesytes.net/)
AC_PREREQ([2.50])
AM_INIT_AUTOMAKE([gnu 1.11 -Wall])
AC_PROG_CXX
AC_LANG([C++]
AC_HEADER_STDC
AC_CHECK_HEADERS([iostream string fstream vector])
PKG_CHECK_MODULES([GTKMM], [gtkmm-2.4 >= 2.10])
AC_CHECK_PROGS([PG_CONFIG], [pg_config])
if test x"$PG_CONFIG" = x; then
AC_MSG_ERROR([$PACKAGE requires pg_config])
fi
AC_SUBST(PG_LIBS, [`$PG_CONFIG –libdir`])
AC_SUBST(PG_CPPFLAGS, [`$PG_CONFIG –cppflags`])
AC_SUBST(PG_LDFLAGS, [`$PG_CONFIG –ldflags`])
AC_DEFINE([CONF_FILE],["conf/db.conf"],[Arquivo de Configuração])
AC_TYPE_SIZE_T
AC_PREFIX_DEFAULT([~/bin])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile src/Makefile])
AC_OUTPUT

AC_INIT - define o cabeçalho do arquivo e é onde informamos o nome do projeto, versão, e-mail para reportar bugs, nome do arquivo tar e site do desenvolvedor.

AC_PREREQ - informamos a versão do autoconf utilizada.

AM_INIT_AUTOMAKE - iniciamos a checagem do automake, os parâmetros são:
  • gnu - padrão GNU/Linux de projetos
  • 1.11 - versão do automake necessária
  • -Wall - flag de compilação para o gcc ou g++

AC_PROG_CXX - checa se o compilador do C++ está instalado no sistema, para checar o compilador do C retiramos o XX.

AC_LANG - checa se determinada linguagem de programação está presente no sistema no caso do exemplo a linguagem C++.

AC_HEADER_STDC - checa se os cabeçalhos da Standard C estão presentes, esta checagem pode ser omitida se não for utilizar headers que são presentes em C e C++.

AC_CHECK_HEADERS - checa as headers necessárias para o seu programa, nesse ponto você deve listar todos as headers que deseja incluir no seu projeto.

PKG_CHECK_MODULES - esse macro é utilizado para checar a instalação de uma determinada biblioteca, que é mantida em uma lista pelo comando "pkg-config". Após checado ele gera variáveis internas para serem utilizadas nos "Makefile.am" utilizando o prefixo informado, no exemplo o GTKMM, seguido dos sufixos _CPPFLAGS, _LDFLAGS.

AC_CHECK_PROGS - esse macro serve para testar a existência de um programa que será utilizado, veja que sua estrutura é formada por duas partes, a primeira você nomeia a variável local que irá armazenar o caminho do programa, e a segunda é o nome do programa que irá ser checado no PATH padrão do seu sistema.

Usando o "if", observe que essa estrutura condicional está utilizando o padrão bash, você pode testar se obteve sucesso na checagem da existência do programa testado, e enviar uma mensagem de erro caso o mesmo não foi encontrado.

AC_SUBST - esse macro serve para você declarar variáveis que podem ser utilizadas nos Makefile.am para auxiliar na compilação do programa.

AC_DEFINE - utilizamos esse macro para definir "macros" da linguagem C/C++ para checagem do preprocessador.

AC_TYPE_SIZE_T - se estiver utilizando a biblioteca time.h é recomendado utilizar esse macro para checar a declaração do size_t na linguagem.

AC_PREFIX_DEFAULT - aqui nos definimos o diretório onde será instalado o programa após compilado, ou seja, quando executarmos o "make install", ele irá utilizar a informação contida nessa linha para determinar onde será instalado o programa, porém se omitido podemos modificá-lo na hora do "./configure" utilizando o argumento "--prefix=".

AC_CONFIG_HEADERS - esse macro é utilizado para definirmos o nome do arquivo headers que será gerado ao final de toda a checagem feita, ou seja, a listagem da existências dos headers checados, dos defines criados e além disso o nome do projeto, juntamente com as informações passadas no início do "configure.ac".

AC_CONFIG_FILES - aqui nos colocamos os arquivos que serão gerados, geralmente os caminhos dos Makefiles, utilizando as informações preprocessadas.

AC_OUTPUT - finalizamos com esse macro para dizer para o script (configure) que já pode gerar os outputs necessários que já foram definidos acima.

Arquivo Makefile.am

Nesse arquivo especificaremos quais serão as pastas compiladas e quais os arquivos que pertencem ao projeto.

Vejamos um exemplo básico:

SUBDIRS = src

Projetodir = $(prefix)
   Projeto_DATA = README\
   COPYING\
   AUTHORS\
   ChangeLog\
   INSTALL\
   NEWS\
   CREDITS

EXTRA_DIST = $(Projeto_DATA)

Vamos observar alguns detalhes importantes nesse arquivo:

SUBDIRS - essa variável vai receber a lista de todos os diretórios que tem outros Makefile.am, cada diretório é separado por um espaço, podendo existir mais de um diretório.

Página anterior     Próxima página

Páginas do artigo
   1. Estrutura padrão
   2. Arquivos configure.ac e Makefile.am
   3. Arquivos src/Makefile.am e src/main.cpp
   4. Gerando script "configure"
   5. Compilando com o "make"
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Slackware não tem gerenciador de pacotes?! Não tinha!

Conhecendo e usando o gerenciador de pacotes pacman

Cafe Con Leche (Gerenciador de Lan House e Cyber Café)

WPS Office Atualizado no Slackware 14.2 em Português

Octave, uma poderosa e robusta ferramenta matemática

  
Comentários
[1] Comentário enviado por eduardomozart em 26/10/2015 - 09:44h

Parabéns pelo artigo! Muito bom!

[2] Comentário enviado por ksombrah em 27/10/2015 - 09:23h


[1] Comentário enviado por jaysponsored em 26/10/2015 - 09:44h

Parabéns pelo artigo! Muito bom!


Obrigado! O próximo será na mesma linha, mas voltado para bibliotecas


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts