Diferencias entre sistemas UNIX... e incluso Windows

Ahora bien, para poder hacer una distribución que se ajuste a cada computadora de nuestro programa es necesario utilizar un "toolchain" o cadena de herramientas que nos genere de forma automática el Makefile. De esta manera el Makefile podrá ser generado desde nuestro ./configure. Para crear el configure utilizaremos autotools.

Como es conocido por muchos, los sistemas UNIX o parecidos a el tienen gran cantidad de variantes, y cada una de estas variantes tendría que tener su propio sistema de generación Make. Sin embargo el proyecto Automake ha facilitado esto, creando una interáz de autogeneración de archivos Make y configure. Veamos como se crea esto.

Es común en los sistemas tipo Unix, la distribución de programas en forma de código, que es compilable por el usuario. Una de las grandes ventajas que tiene esta forma de distribuir es la adaptación óptima al hardware y al sistema operativo para aprovechar al máximo las características del equipo. Para poder distribuir de forma adecuada el código fuente se suelen comprimir en archivos tar.gz (o tarballs) o cualquier otro tipo de compresión una serie de archivos que contienen el código fuente, otros archivos como instructivos, documentación, los archivos Makefile y configure. Se ejecutan de la siguiente forma:


\begin{lstlisting}
$ ./configure
$\ make
$ sudo make install
\end{lstlisting}
Los archivos Makefile.am y configure.in son archivos de entrada para automake. Un archivo básico configure.in puede ser el siguiente:


\begin{lstlisting}
dnl Produce el archivo configure
\par
AC_PREREQ(2.59)
\par
AC...
...ROG_LEX
AC_PROG_YACC
\par
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
\end{lstlisting}

Y un archivo Makefile.am se verá de la siguiente forma:


\begin{lstlisting}
bin_PROGRAMS = prueba
prueba_SOURCES = main.c
prueba_LDADD = @LEXLIB@
\end{lstlisting}

Esto permitirá a autotools generar nuestros archivos configure,Makefile etc.. todo listo para que la compilación del programa se ajuste al sistema operativo sobre el cual queremos llevar acabo la compilación. Sólo necesitamos introducir las sigueintes líneas en el shell:


\begin{lstlisting}
$\ autoreconf --install
$ ./configure
$\ make
\end{lstlisting}

Con esto no es necesario escribir un código distinto para uno u otro sistema, y podemos reciclar toda la cantidad de líneas código que queramos.

julio 2010-08-25