# 3.3. Configure

O título desta secção deixa-lhe provavelmente a questão: Configurar ? O que tem de ser configurado? Ou quem? Bem, assuma que escreveu um programa incluindo um Makefile. Depois deseja distribui-lo, mas o binário compilado apenas corre no seu sistema ou em sistemas que são compatíveis com o seu. Para suportar outras plataformas como diferentes sistemas Unix ou máquinas como Alpha's ou RISC's, tem de recompilar o programa. A forma mais simples seria copiar o pacote com o código fonte para a máquina alvo e executar `make` de novo. Mas e se a máquina alvo utiliza outro comando de compilador ou tem de outra forma um problema em construir o seu binário? Já para não mencionar assuntos mais difíceis tais como caminhos de instalação para o seu programa e documentação- por ex. o KDE pode estar instalado em ``opt/kde/ numa máquina, enquanto esta instalado em ``usr/local/kde/ noutra. Neste caso, você teria de re-escrever o Makefile cada vez para assegurar uma correcta compilação e instalação do seu produto.

Felizmente, as ferramentas GNU têm ainda mais a oferecer que aquele poderoso `make`- os muito utilizados pacotes automake e autoconf. Soa bem ouvir algo com "auto"- parece que algo sobre o desenvolvimento de aplicações pode ser feito fácil e rapidamente, o que completamente correcto.

O objectivo do Automake é basicamente criar um chamado `Makefile.in` a partir de um ficheiro `Makefile.am` que tem de escrever para o seu projecto. Este Makefile.am consiste em macros que podem ser interpretadas e reduzem a complexidade que o make apresenta, pelo que um Makefile.am é escrito mais segura e rapidamente que o Makefile final.

Tendo dito isto, quem é que afinal está a criar o meu Makefile ? Agora, aqui entra o autoconf. O Autoconf necessita de vários ficheiros de macro para o projecto. Esses ficheiros são o Makefile.in gerado pelo automake e um ficheiro chamado `configure.in`, também contendo macros. Assim o Makefile.am e .in contêm macros que são responsáveis pela forma como a sua aplicação é construida em termos de que código fonte é compilado, que ficheiros pertencem ao pacote e que nome o binário final ou biblioteca terá após a construção. O Configure.in por outro lado contém macros sobre o que o script de consola configure irá verificar no sistema em que o configure é executado. Poderão ser por ex. o comando de compilador, bibliotecas necessárias com as quais o binário final será ligado (linked), ficheiros include que o projecto necessita e a sua localização.

Por exemplo você deseja escrever uma aplicação KDE . Após escrever o seu código, deseja distribuir o seu programa à comunidade, e cada utilizador tem de compilar o binário por si. Então você escreveria um ficheiro configure.in que conteria as macros para uma aplicação compatível com o KDE . Essa macro irá expandir-se para verificar o sistema sobre se a biblioteca Qt está instalada, verificar onde estão os ficheiros header do Qt, as bibliotecas KDE e headers etc.

Resumo: Para criar uma aplicação compatível GNU que seja portável para diferentes sistemas operativos Unix e máquinas que não a sua, terá de fazer o seguinte:

1. escreva o código do seu projecto

2. escreva um Makefile.am para cada subdirectório, incluindo o directório principal do seu projecto

3. escreva um ficheiro configure.in gravado no directório principal do seu projecto contendo as macros com os requerimentos de sistema

4. execute o automake

5. execute o autoconf

Então o trabalho principal está feito. O Automake cria os Makefile.in, o autoconf processa o configure.in e Makefile.in's e gera um script de consola executável chamado `configure`. Tudo o que então tem a fazer é executá-lo com ./`configure` e o script fará as verificações da sua escolha. Finalmente os Makefiles serão gerados e permitirão uma execução final do make (ou gmake) que irá processar todos os Makefiles e tudo estará feito.

Isto parece ser um monte de coisas para escrever uma pequena aplicação e muito a aprender especialmente como escrever macros correctamente. Mas mesmo o facto de que possibilitará a compilação em quase todos os sistemas Unix valerá a pena mais cedo ou mais tarde. Finalmente, você apenas tem de fazer este trabalho uma vez para o seu projecto e no caso de os ficheiros do seu projecto aumentarem apenas terá de acrescentar os seus nomes às macros.

Agora, quão longe o KDevelop suporta este tipo de desenvolvimento aplicacional e quão complicado se torna para o programador? As boas noticias são, que você nem precisa de saber nada sobre macros e scripts. Todos os detalhes são escondidos atrás de um interface gráfico fácil de utilizar e que faz o trabalho por si. Uma aplicação é assim criada com as ferramentas GNU de uma forma muito amiga do utilizador:

Basta gerar a sua aplicação com o KAppWizard, pela escolha das necessidades da sua aplicação- seja ela uma aplicação pura de terminal em C++ ou um programa com uma espécie de interface gráfico utilizando as bibliotecas Qt ou Qt/KDE . Todo o trabalho é feito automaticamente e o seu projecto já conterá os Makefiles que são criados pela execução automática das ferramentas GNU e do script de configuração.

É tudo- está preparado para expandir o código do seu projecto, seja adicionando classes, diálogos, traduções ou documentação, o que é também completamente automatizado. Concentre-se apenas no verdadeiro trabalho do programador, que é criar funcionalidades para a aplicação final que deseja criar. Na maior parte dos casos, provavelmente não chegará a entrar em contacto com Makefiles de todo enquanto a utilizar o KDevelop.