En lo que sique(incluido este como el
primero) estaré publicando una serie de posts relacionados con la
creación y configuración de proyectos basados en el grupo de
herramientas de autotools(antes es aconsejable revisar el directorio
/usr/share/doc/gnu-standards, de este no existir ejecuta apt-get install gnu-standards y además ver también este
enlace a wikipedia) y algunas otras que se le integran muy bien, además
mencionar que me basaré en los lenguajes C/C++ pero que bien se adapta a
otro tipo de lenguajes como son C, C++, Java, Python, Fortran, Yacc,
awk, etc.
Primero que todo veamos la estructura
básica de un proyecto, los directorios y archivos principales que lo
componen y después veremos como editamos estos últimos para lograr un
proyecto muy básico, nuetro “hola mundo”.
Estructura básica:
Escojemos un directorio en el cual
relizaremos nuestro trabajo y ejecutamos la siguiente secuencia de
comandos para crear las bases del proyecto.
mkdir -p hola_mundo/src
cd hola_mundo/
touch Makefile.am configure.ac src/Makefile.am src/hello-world.c NEWS AUTHORS ChangeLog README MAINTAINERS HACKING VERSION THANKS TODO
cd hola_mundo/
touch Makefile.am configure.ac src/Makefile.am src/hello-world.c NEWS AUTHORS ChangeLog README MAINTAINERS HACKING VERSION THANKS TODO
Ejecutando el comando tree -v(man
tree) ya visualizamos la estructura actual del proyecto (Fig 1) donde
tenemos los archivos principales de información, (compuesto por 2
grupos, los obligatorios Fig 2 (aquí faltan COPYING e INSTALL lo que no
los pondré ya que autotools te propone los correspondientes que deberás
editar para adptarlo a las necesidades de tu proyecto) y los opcionales
(Fig 3)), los archivos inherentes a las herramientas de autotools
también llamados de configuración (Fig 4), y por su puesto los
archivos/directorios donde estará el código fuente(en este caso solo
uno).
Edición de los archivos de configuración de autotools:
#configure.ac
AC_PREREQ([2.69])
AC_INIT([hola-mundo],[0.0.0], [denisacostaq@gmail.com], [hola_mundo], [blogspoot.com/embelinux])
AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([1.10.1])
AC_PROG_CC
AC_OUTPUT([Makefile src/Makefile])
Comentaré superficialmente el contenido de este archivo, para una información más detallada ver /usr/share/doc/autoconf-doc/ (apt-get install autoconf-doc), este archivo se escribe en M4.
- AC_PREREQ advierte
sobre la verción mínima de autoconf con que debe contar tu sistema
(autoconf –version, para saber que valor poner en tu caso).
- AC_INIT tiene como
parámetros el paquete, la verción, el e-mail de reporte de bugs, el
nombre de empaquetamiento y la url del proyecto en ese orden y no siendo
obligatorios todos estos parámetros.
- AC_CONFIG_HEADERS dice donde poner el archivo config.h(que puede tener otro nombre) el cual puede ser usado en el código de nuestro proyecto.
- AM_INIT_AUTOMAKE
automake y especificamos que verción (automake –version). Se pueden
escribir macros para automake, estas comienzan con el prefijo AM_ .
- AC_PROG_CC
especificamos que usaremos el compilador de c y se le pudiera pasar un
lista de comprobación, sino la pasamos autoconf comprueba usando una que
tiene internamente.
- AC_OUTPUT especificamos los lugares en que queremos un Makefile(también se pueden obtener otros ficheros) como salida.
#Makefile.am
SUBDIRS = src
EXTRA_DIST = README THANKS TODO HACKING MAINTAINERS
Para este archivo se puede leer el manual GNU Automake.
- SUBDIRS especifica
los directorios por los que se debe mover make, es aproximadamente el
orden que sequirá el “topological sort”.
- EXTRA_DIST es para incluir en el empaquetado archivos que no son indispensables en el proyecto.
#src/Makefile.am
bin_PROGRAMS = hola-mundo
hola_mundo_SOURCES = hello-world.c
En la variable bin_PROGRAMS
especificamos el o los programas binarios que se van a crear. Después
como muestra hello_world_SOURCES especificamos el código fuente a partir
del cual se creará cada binario fijandote en tranformar el nombre del
binario a su forma canónica, ej:hola-mundo -> hola_mundo y
agregandole el sufijo _SOURCES.
Una vez editados estos archivos de
configuración de proyecto ponemos el código, ej: printf (“hello
world\n”); y por último coenzamos a invocar a las herramientas de
autoconstrucción.
aclocal
autoheader
autoconf
automake -a (con la opcion -a no pone el archivo COPYING(enlace a /usr/share/automake-1.13/COPYING) e INSTALL(enlace a /usr/share/automake-1.13/INSTALL) como ya había mencionado)
./configure (en este punto se chequea si nuesto sistema está preparado para compilar el programa, por ejemplo desintala el compilador y verás lo que sucede).
make (ya podemos ejecutar nuestro programa que se llama hello_world y está en src).
autoheader
autoconf
automake -a (con la opcion -a no pone el archivo COPYING(enlace a /usr/share/automake-1.13/COPYING) e INSTALL(enlace a /usr/share/automake-1.13/INSTALL) como ya había mencionado)
./configure (en este punto se chequea si nuesto sistema está preparado para compilar el programa, por ejemplo desintala el compilador y verás lo que sucede).
make (ya podemos ejecutar nuestro programa que se llama hello_world y está en src).
La llamada a aclocal busca todas las
macros m4 en todos los archivos *.m4 en el directorio donde se ejecuta y
finalmente en configure.ac poniendolas todas juntas en el archivo
aclocal.m4 que genera. El comando autoheader crea el archivo.h.in,
autoconf es el responsable de crear el archivo(scrip) configure,
automake genera los archivos Makefile.in ,y por ultimo ./configure es
quien genera los Makefile a partir de Makefile.in y config.h a partir de
config.h.in. A modo de resumen, se muestra en el siguiente diagrama el
flujo del funcionamiento de las herramientas (Fig 5).
![]() |
Fig 5 |
Adicionalmente podemos ejecutar como
root make install que instala nuestro programa en el sistema, por
defecto en /usr/local, podemos modificar esto volviendo a ejecutar ./configure pero esta vez con el parametro –prefix=PATH. También podemos ejecutar make dist y nos empaqueta el proyecto.
Como nota adicional comentar que debes tener todas estas herramientas en tu sistema para trabajar con autotools pero una vez que tengas el empaquetado solo necesitas los compiladores, bibliotecas, frameworks y todo de lo que dependa tu programa para compilarse pero no las herramientas con las cuales creates el paquete, o sea ya podrás ejecutar el clásico
(./configure ; make ; sudo make install).
Como nota adicional comentar que debes tener todas estas herramientas en tu sistema para trabajar con autotools pero una vez que tengas el empaquetado solo necesitas los compiladores, bibliotecas, frameworks y todo de lo que dependa tu programa para compilarse pero no las herramientas con las cuales creates el paquete, o sea ya podrás ejecutar el clásico

No hay comentarios:
Publicar un comentario
Deje su comentario..., 0 palabras obscenas...