Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Se otorga permiso para copiar, distribuir y/o modificar este documento bajo los trminos de la Licencia de Documentacin Libre GNU, versin 1.1 o cualquier
versin posterior publicada por la Free Software Foundation. No hay Secciones Invariantes ni Textos de Portada o Contraportada. Puedes consultar una copia de
la licencia en http://www.gnu.org/copyleft/fdl.html.
Tabla de contenidos
1.
2.
3.
4.
5.
6.
Introduccin
aclocal
autoheader
autoconf
automake
Una aplicacin de ejemplo: El proyecto "hola mundo".
Tabla de ejemplos
1. Un archivo configure.in bsico
Tabla de contenidos
1. Introduccin
2. aclocal
3. autoheader
4. autoconf
5. automake
6. Una aplicacin de ejemplo: El proyecto "hola mundo".
1. Introduccin
aclocal genera el archivo aclocal.m4, a partir del cual acceder a las macros de Automake, es decir, prepara el camino para usar Automake.
2. aclocal
aclocal busca macros en todos los archivos .m4 del directorio en donde se ejecuta y finalmente busca en el archivo configure.in. Todas esas macros se incluirn
en el archivo aclocal.m4, as como las macros de las cuales dependen.
El archivo acinclude.m4 sirve para especificar macros locales (propias del proyecto) en configure.
El archivo aclocal.m4 solo ser generado si se encuentran macros de Automake, es decir, que comiencen con AM_
Por ejemplo, un archivo configure.in basico (sin funcionalidad):
Ejemplo 1. Un archivo configure.in bsico
A C _ P R E R E Q ( 2 . 5 2 )
A C _ I N I T ( m i p r o g r a m a , 0 . 1 )
A M _ A U T O M A K E _ V E R S I O N ( 1 . 7 . 2 )
A C _ O U T P U T ( M a k e f i l e )
Despus de ejecutar aclocal, se crear el archivo aclocal.m4 bastante pequeo, y slo es de ejemplo. Si deseamos usar Automake, entonces debemos aadir la
macro AM_INIT_AUTOMAKE, para aadir todas las funcionalidades de Automake.
En ese caso, hemos puesto la macro AM_AUTOMAKE_VERSION para indicar que requerimos de la versin 1.7.2 de automake. En este ejemplo, lo hemos empleado,
para ver como es el archivo aclocal.m4 generado.
Una disgresin entre AC_INIT y AM_INIT_AUTOMAKE. Ambas macros son capaces de inicializar el nombre del paquete y la versin (que ms adelante
emplearemos).
La forma antigua de hacerlo es:
A C _ I N I T
A M _ I N I T _ A U T O M A K E ( m i p r o g r a m a , v e r s i o n )
Actualmente AM_INIT_AUTOMAKE acepta el nombre del paquete y la versin, pero no hay garanta que en el futuro siga funcionando de esa forma. Por lo tanto,
es conveniente usar el nuevo formato.
http://calcifer.org/documentos/autotools/
1/5
6/10/2015
3. autoheader
Autoheader crea una plantilla con un conjunto de directivas #define que pueden emplearse desde C. Para indicar el nombre del archivo se debe emplear la macro
AC_CONFIG_HEADERS. En versiones antiguas, se empleaba AM_CONFIG_HEADER, la cual est obsoleta. La forma de usarlo es:
A C _ C O N F I G _ H E A D E R S ( c o n f i g . h )
Con lo cual Autoheader crear el archivo config.h.in y que en un proceso posterior, pasar a ser config.h El nombre del archivo es arbitrario, pero config.h ya es
estndar en las aplicaciones.
En nuestro ejemplo, tenemos entonces:
A C _ P R E R E Q ( 2 . 5 2 )
A C _ I N I T ( m i p r o g r a m a , 0 . 1 )
d n l A M _ C O N F I G _ H E A D E R i s o b s o l e t e ,
A C _ C O N F I G _ H E A D E R S ( c o n f i g . h )
w e
u s e
A C _ C O N F I G _ H E A D E R S
i n s t e a d
A M _ A U T O M A K E _ V E R S I O N ( 1 . 7 )
A M _ I N I T _ A U T O M A K E
A C _ O U T P U T ( M a k e f i l e )
a c l o c a l
a u t o h e a d e r
$
Vemos que sea ha creado el archivo aclocal.m4, config.h.in y autom4te.cache. Los dos ltimos, generados por autoheader. El resultado en config.h.in es el
siguiente:
/ *
c o n f i g . h . i n .
G e n e r a t e d
/ *
N a m e o f p a c k a g e
# u n d e f P A C K A G E
f r o m
c o n f i g u r e . i n
D e f i n e t o t h e a d d r e s s
# u n d e f P A C K A G E _ B U G R E P O R T
w h e r e
D e f i n e t o t h e f u l l
# u n d e f P A C K A G E _ N A M E
n a m e
o f
/ *
n a m e
a n d
b u g
/ *
D e f i n e t o t h e f u l l
# u n d e f P A C K A G E _ S T R I N G
/ *
/ *
t h i s
o f
o f
p a c k a g e
f o r
p a c k a g e .
v e r s i o n
s h o r t
D e f i n e t o t h e v e r s i o n
# u n d e f P A C K A G E _ V E R S I O N
r e p o r t s
t h i s
D e f i n e t o t h e o n e s y m b o l
# u n d e f P A C K A G E _ T A R N A M E
V e r s i o n n u m b e r
# u n d e f V E R S I O N
a u t o h e a d e r .
* /
* /
/ *
/ *
b y
n a m e
t h i s
p a c k a g e
b e
s e n t .
* /
* /
o f
t h i s
p a c k a g e .
* /
o f
t h i s
p a c k a g e .
* /
p a c k a g e .
s h o u l d
* /
* /
4. autoconf
autoconf genera un script de configuracin a partir de de las definiciones en configure.in, que finalmente nos permitir compilar la aplicacin de acuerdo a la
configuracin del sistema (respecto a la ubicacin de archivos e implementaciones de funciones, etc.)
Autoconf primero busca en las macros que tiene en forma predefinida y luego en el archivo aclocal.m4, si existe, que anteriormente generamos con aclocal.
Despus de ejecutar:
$
a u t o c o n f
5. automake
La utilidad es ampliamente usada en el desarrollo de aplicaciones, ya que a partir de un archivo, llamado Makefile, que contiene reglas de dependencia es capaz de
determinar las acciones a seguir, comunmente determinar que programas deben compilarse para obtener la aplicacin.
Sin embargo, es tedioso crear las reglas para que construya a travs de varios subdirectorios, con seguimiento automtico de dependencias, etc. Si se trabaja en
varios proyectos, significa, prcticamente, reinventar la rueda en cada uno de ellos, sin mecionar los problemas de portabilidad.
Automake permite automatizar esta labor.
Automake emplea el archivo Makefile.am como fuente, en donde se indica lo esencial a construir, y ser necesario por cada uno de los directorios en que
http://calcifer.org/documentos/autotools/
2/5
6/10/2015
necesitemos realizar alguna tarea. A partir de ello, generar una plantilla llamada Makefile.in.
Los archivos Makefile.in que se generarn depender exclusivamente de lo que se indique en la macro AC_OUTPUT.
As, despus de eliminar la macro AC_CONFIG_HEADERS (mas adelante se explicar nuevamente) obtendremos el siguiente resultado:
$
a u t
f i
f i
f i
e f
e f
e f
e f
e f
e f
c o n
c o n
c o n
M a k
M a k
M a k
M a k
M a k
M a k
o m a
g u r
g u r
g u r
i l e
i l e
i l e
i l e
i l e
i l e
k e
e . i
e . i
e . i
. a m
. a m
. a m
. a m
. a m
. a m
n :
r e q
r e q
r e q
e q u
e q u
e q u
e q u
e q u
e q u
n :
n :
:
r
:
r
:
r
:
r
:
r
:
u i r
u i r
u i r
i r e
i r e
i r e
i r e
i r e
i r e
e d
f i l e
f i l e
f i l e
i l e `
i l e `
i l e `
i l e `
i l e `
i l e `
e d
e d
d
f
d
f
d
f
d
f
d
f
d
` . /
` . /
` . /
. / C
. / I
. / N
. / R
. / A
. / C
i n s
m k i
m i s
O P Y
N S T
E W S
E A D
U T H
h a n
t a l
n s t
s i n
I N G
A L L
'
n
M E '
O R S
g e L
l - s h
a l l d
g ' n
' n o
' n o
o t f
n o t
' n o
o g '
'
n o
i r s '
o t f
t f o
t f o
o u n d
f o u
t f o
n o t
f o u n d
n o t f o u n d
o u n d
u n d
u n d
n d
u n d
f o u n
Nos indica que faltan archivos, que corresponden al de un proyecto. Los 5 primeros, automake los puede proveer porque son estdares en cada aplicacin, y
salvo que queramos realizar algn cambio, podemos quedarnos con lo que nos sugiera, para ello utilizaremos la opcin '--add-mising' de automake. Sin embargo,
los 4 ltimos son propios de la aplicacin y debemos crearlos, considerando que:
NEWS, es un registro de los cambios visibles al usuario donde los cambios ms recientes se deben colocar al inicio.
README, tiene una descripcin general del paquete. Tambin es posible indicar instrucciones especiales de instalacin.
AUTHORS, contiene la lista de nombres de quienes han trabajado en la aplicacin.
ChangeLog, es un registro de todos los cambios que se han efectuado en la aplicacin.
Adicionalmente, se recomienda incorportar los archivos MAINTAINERS y HACKING, donde:
MAINTAINERS, contiene la lista de nombres de los responsables del proyecto.
HACKING, contiene instrucciones para otros desarrolladores que quieran contribuir a la aplicacin. Aqu se incluyen normas de sana convivencia como es la el
estilo de programacin, tipos de autorizacin para efectuar cambios en forma directa, etc.
Intentamos nuevamente:
$
$
c o
c o
c o
M a
M a
t o u
a u t
n f i
n f i
n f i
k e f
k e f
c h
N E W
k e
e . i
e . i
e . i
. a m
. a m
o m a
g u r
g u r
g u r
i l e
i l e
R E A
d d
i n
i n
i n
i n s
i n s
- - a
n :
n :
n :
:
:
D M E
- m i
s t a
s t a
s t a
t a l
t a l
A U
s s i
l l i
l l i
l l i
l i n
l i n
g
T H O
n g
n g
n g
n g
R S
` . /
` . /
` . /
` . / C
` . / I
C h a n g e L o g
i n s
m k i
m i s
O P Y
N S T
t a l
n s t
s i n
I N G
A L L
l - s h '
a l l d i r s '
g '
'
Es importante revisar el archivo COPYING, puesto que contiene la licecia de uso de la aplicacin. Por omisin, ser GPL.
Luego, se encuentran todos los archivos preparados para ejecutar el script configure. Hay que notar que, cuando distruyamos nuestra aplicacin, no es necesario
que la contraparte disponga de aclocal, autoheader, autoconf y automake.
Hemos indicado que el nombre de nuestro proyecto se llama 'hola-mundo' y la versin inicial es la 0.1. Hemos aadido la macro AC_PROG_CC, la cual nos proveer
de los verificaciones necesarias para asegurarnos la disponibilidad de un compilador de C.
Finalmente indicamos, que requerimos generar los archivos Makefile del directorio raz y del subdirectorio src.
Nuestro proyecto partir con los siguiente archivos:
$
l s
A U T H O R S
C h a n g e L o g
c o n f i g u r e . i n
$ l s s r c
h o l a _ m u n d o . c
M a k e f i l e . a m
M a k e f i l e . a m
N E W S
R E A D M E
s r c
s r c
http://calcifer.org/documentos/autotools/
3/5
6/10/2015
E X T R A _ D I S T
A U T H O R S
C h a n g e L o g
N E W S
R E A D M E
En donde se indica, que debe procesar el subdirectorio src. SUBDIRS es una variable genrica, en donde se especifican todos los subdirectorios que se deben
procesar.
Luego, indicamos todos los archivos que son parte extra de la aplicacin y que deseamos que se distribuya.
Y el contenido del archivo src/Makefile.am ser:
b i n _ P R O G R A M S
h o l a m u n d o
h o l a m u n d o _ S O U R C E S
h o l a _ m u n d o . c
La variable bin_PROGRAMS indica como se llamar la aplicacin final, nuestro archivo binario (ejecutable), si deseamos generar una biblioteca y no un programa
ejecutable, emplearemos libexec_PROGRAMS.
Cabe notar que le hemos llamado 'holamundo'. Ese mismo texto se emplear para definir otras variables, como holamundo_SOURCES, holamundo_LDADD, por
nombrar las ms comunes.
Nuestro programa en C, contiene:
# i n c l u d e
i n t
m a i n
< s t d i o . h >
( i n t
a r g c ,
c h a r
* * a r g v )
{
p r i n t f
( " H o l a
m u n d o \ n " ) ;
a c l
a u t
a u t
. / c
m a k
$
$
$
$
o c a
o c o
o m a
o n f
l
n f
k e
- - a d d - m i s s i n g
i g u r e
El detalle es:
$
a c l
a u t
a u t
n f i
n f i
n f i
k e f
k e f
c / M
. / c
e c k
e c k
e c k
e c k
e c k
e c k
e c k
e c k
e c k
e c k
e c k
e c k
e c k
e c k
e c k
n f i
n f i
n f i
n f i
m a k
k i n
k e [
u r c
p f i
p m o
$
$
c o
c o
c o
M a
M a
s r
$
c h
c h
c h
c h
c h
c h
c h
c h
c h
c h
c h
c h
c h
c h
c h
c o
c o
c o
c o
$
M a
m a
s o
d e
d e
g c c
g c c
m a k
m a k
m a k
m a k
$
o c a
o c o
o m a
g u r
g u r
g u r
i l e
i l e
a k e
o n f
i n g
i n g
i n g
i n g
i n g
i n g
i n g
i n g
i n g
i n g
i n g
i n g
i n g
i n g
i n g
g u r
g . s
g . s
g . s
l
n f
k e
- - a
n :
n :
n :
d d i n s
i n s
i n s
: i n s t
: i n s t
e . a m :
r e
r a B S
e t h e r
r g a w k
e t h e r
r g c c .
r C c o
e t h e r
e t h e r
r s u f f
r s u f f
e t h e r
e t h e r
r g c c
r s t y l
p e n d e n
c r e a t i
u s : c r
u s : c r
u s : e x
e . i
e . i
e . i
. a m
. a m
f i l
i g u
f o
w h
f o
w h
f o
f o
w h
w h
f o
f o
w h
w h
f o
f o
d e
e :
t a t
t a t
t a t
m i s
t a l
t a l
t a l
a l l
a l l
i n s
s i n
l i n
l i n
l i n
i n g
i n g
t a l
D - c
b u i
. . .
m a k
. .
m p i
t h e
w e
i x
i x
w e
g c c
o p t
t i b l e i n s t a l l . . . / h o m e / g p o o / b i n / i n s t a l l
n v i r o n m e n t i s s a n e . . . y e s
e a t
e a t
e c u
o m p a
l d e
g a w
e s e
g c c
l e r
C c
a r e
o f e
o f o
a r e
a c c
i o n
f i n
s t y l
. / c o
i n g
i n g
t i n g
n f i
M a k
s r c
d e
g . s
e f i
/ M a
p f i
o u t
w o r
c o m p i
b l e s .
f i l e s
t h e G
g . . .
e p t A
u s e d
c c . . .
t a t u s
l e
k e f i l
l e s c
d i
o . c
l a _
s h
E = \
h o l
d i r
d i
c e
d i r
r e c t
' o b
m u n d
. . / d
" h o l
a m u n
e c t o
r e c t
n a d a
e c t o
o r y
j e c
o . P
e p c
a - m
d o
r y
o r y
p a
r y
` /
t = '
o '
o m p
u n d
h o
` / h
` /
r a
` / h
h o m
h o l
t m p
\
o \ "
l a _
o m e
h o m
` a l
o m e
o
c y
n g
g
g
` . /
` . /
g ` . /
` . / C
` . / I
l i n g
i n s
m k i
m i s
O P Y
N S T
` . /
t a l
n s t
s i n
I N G
A L L
d e p
l - s h '
a l l d i r s '
g '
'
'
c o m p
- c
k
t s
$ ( M A K E ) . . .
y e s
d e f
o m p
c r o
x e c
b j e
u s i
e p t
t o
c l u
a u l
i l e
s s
u t a
c t
n g
. . . a . o u t
. . y e s
g . . . n o
a c c
d e
p u t
k s .
l i n
. .
. . .
N U
y e s
N S I
b y
g c
o f
o
C
c o m p i l e r . . .
y e s
C . . . n o n e n e e d e d
m a k e . . . G N U
c
e
o m m a n d s
e [
e [
e [
e [
s r c
H o l a
a l l
1 ] :
e = '
l e =
d e =
D P A
- g
1 ] :
1 ] :
1 ] :
1 ] :
/ h o
m u n
i n
E n t
o l a
. d e
c c
K A G
O 2
L e a
E n t
N o
L e a
a m u
h
'
g
C
-
s r c
n g
n d
h o
n /
A M
- o
n g
i n g
h a
n g
e r i
_ m u
p s /
/ b i
E _ N
v i
e r
s e
v i
e / g p o o / t m p / a u t o t o o l s / s r c '
a _ m u n d o . o ' l i b t o o l = n o \
d e p f i l e = ' . d e p s / h o l a _ m u n d o . T P o '
- D
m u n
/ g p
e / g
l - a
/ g p
P A C
d o .
o o /
p o o
m ' .
o o /
K A G E _ T A R N A M E = \ " h o l a - m u n d o \ "
- D P A C K A G E _ V E R S I O N = \ " 0 . 1 \ "
- D P A C K A G E _ S T R I N G = \ " h o l a - m u n d o \
0 . 1 \ "
- D P A C K A G E _ B
o
t m p / a u t o t o o l s / s r c '
/ t m p / a u t o t o o l s '
t m p / a u t o t o o l s
n d o
d o
http://calcifer.org/documentos/autotools/
4/5
6/10/2015
m a k
. ]
= =
a = =
[ . .
= = =
h o l
= = =
d i s t c k e c k
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
m u n d o - 0 . 1 . t a r . g z i s r e a d y f o r d i s t r i b u t i o n
= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
Es decir, nos ha empaquetado un archivo listo para liberar la versin 0.1 de hola-mundo.
Adems, podemos ejecutar make install, make uninstall, make clean, make distclean.
http://calcifer.org/documentos/autotools/
5/5