Autotools …

19 10 2007

En el mundo del desarrollo informático es necesario seguir algunos estándares y guías de diseño para ganar en portabilidad si quisiéramos por ejemplo ejecutar nuestro producto en diferentes arquitecturas o sistemas operativos, en extensibilidad si quisiéramos añadirle elementos nuevos a nuestro producto afectando lo menos posible a los restantes y en automatización para que todo el proceso de desarrollo sea ágil e involucre lo menos posible al usuario. A pesar de que existen otros puntos en los que se pueden hacer énfasis, nos centraremos en estos tres para dar introducción a un grupo de herramientas que nos ayudarán a controlar, gestionar, automatizar y construir nuestros proyectos: autotools

Las herramientas automáticas no son más que un compendio de aplicaciones con fines específicos ampliamente usadas, específicamente en el mundo de software libre, para distribuir y desarrollar proyectos de distinta índole. Poco a poco abordaremos en detalle cada una. Para obtener mayor información pueden consultar:

Automake
Autoconf
Libtool

La teoría

Cada aplicación es autónnoma y su uso, relacionado o independiente, depende del tipo de proyecto que querramos gestionar. Antes de comenzar a explicar su funcionamiento, sería bueno identificar los conceptos que manejaremos:

configure.ac >> Archivo que almacena las opciones mediante las cuales configuraremos nuestro proyecto
Makefile.am >> Archivo mediante el cual se generan los archivos Makefile
Makefile >> Archivo que almacena las reglas de producción
configure.in >> Archivo que almacena las reglas de configuración
.deps >> Carpeta oculta que almacena las dependencias para todos los elementos dentro del directorio actual
autom4te.cache >> Carpeta para uso propio de la herramienta automake
aclocal.m4 >> Archivo generado por aclocal
compile, config.guess >> Archivos para uso propio de la herramienta
libtool >> Archivo usado por la herramienta libtool para construir bibliotecas

A grandes rasgos hemos enumerado algunos de los ficheros que se crearán una vez que empecemos a construir nuestro proyecto. Muchos se autogeneran por las herramientas automáticas, y otros debemos crearlos.

Este grupo de herramientas funciona partiendo de una raíz y recursivamente va construyendo todas las dependencias necesarias para el correcto despliegue de nuestro producto. Siguiendo reglas predefinidas, esta comenzará a producir salidas determinadas según lo que especifiquemos.

De usar automake es necesario que el usuario sepa que actualmente sólo existe soporte completo para C, C++, Objective C, Fortran 77, Fortran 9x y Java.

En todos los ejemplos que mostraremos usaremos programas hechos en C++.

Instalación

Para instalar las herramientas en dependencia de nuestro sistema o distribución usaremos los paquetes pertinentes, fichero de instalación o directamente compilando el código fuente. Necesitamos tener instalado el programa “make” que será quien creará las reglas de producción que definamos. Los programas que debemos tener instalados para poder configurar nuestro proyecto con los autotools son : automake, autoconf y libtool.

El paquete build-essential resuelve el grupo de aplicaciones para compilar ( compilador, vinculador, etc … ). Un ejemplo de instalación podría ser:

# apt-get install automake autoconf libtool build-essential

Hola Mundo …

Empezaremos con un sencillo “Hola Mundo”. Mostraremos la estructura de carpetas para la cual se construye el proyecto y se produce un archivo ejecutable así como el contenido de cada fichero.

main.cpp:

#include 
int main ( int argc, char** argv )
{
         std::cout << "Hola Mundo" << std::endl;

         return 0;
}

configure.ac:

AC_INIT([holaMundo], [0.1], [teratux@blogspot.com])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CXX

AC_CONFIG_FILES([
Makefile
])
AC_OUTPUT

Makefile.am

bin_PROGRAMS = hola_mundo

hola_mundo_SOURCES = main.cpp

Y quedarían de esta forma:

+ .
-> configure.ac
-> main.cpp
-> Makefile.am

Crearemos ahora un fichero que nos servirá para autogenerar los archivos necesarios para crear nuestro proyecto el cual también irá en la raíz del proyecto.
autogen.sh:


#!/bin/sh

aclocal
autoconf
autoheader
automake --add-missing --foreign
./configure

Ya tenemos todo listo para construir nuestro proyecto. Para comenzar emitimos:

$ sh autogen.sh

Para generar la regla de producción “hola_mundo” que definimos anteriormente:

$ make hola_mundo

El resultado será un archivo ejecutable del mismo nombre que la regla de producción que al ser llamado producirá una salida:

$ ./hola_mundo
Hola Mundo

Con este ejemplo podremos comprender cómo funciona básicamente la herramienta. En secciones posteriores indagaremos en su uso y configuración.

Advertisements

Actions

Information

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

w

Connecting to %s




%d bloggers like this: