¿Qué son Makefile.am y Makefile.in?
Estos dos archivos se ven principalmente en proyectos de código abierto.
¿Para qué sirven y cómo funcionan?
Makefile.am
es un archivo definido por el programador y lo utiliza para automake
generar el Makefile.in
archivo ( .am
significa auto make ). El script que normalmente se ve en los archivos tar de origen utilizará para generar un archivo .configure
Makefile.in
Makefile
El configure
script en sí se genera a partir de un archivo definido por el programador llamado configure.ac
o configure.in
(obsoleto). Prefiero .ac
(para un auto conf ) ya que lo diferencia de los Makefile.in
archivos generados y de esa manera puedo tener reglas como make dist-clean
cuál se ejecuta rm -f *.in
. Dado que es un archivo generado, normalmente no se almacena en un sistema de revisión como Git, SVN, Mercurial o CVS, sino el .ac
archivo.
Lea más sobre GNU Autotools . Lea sobre make
y Makefile
primero, luego aprenda sobre automake
, autoconf
, libtool
, etc.
Ejemplo sencillo
Adaptado descaradamente de: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html y probado en Ubuntu 14.04 Automake 1.14.1.
Makefile.am
SUBDIRS = src
dist_doc_DATA = README.md
LÉAME.md
Some doc.
configurar.ac
AC_INIT([automake_hello_world], [1.0], [[email protected]])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
Makefile
src/Makefile
])
AC_OUTPUT
src/Makefile.am
bin_PROGRAMS = autotools_hello_world
autotools_hello_world_SOURCES = main.c
src/principal.c
#include <config.h>
#include <stdio.h>
int main (void) {
puts ("Hello world from " PACKAGE_STRING);
return 0;
}
Uso
autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autotools_hello_world
sudo make uninstall
Esto produce:
Hello world from automake_hello_world 1.0
Notas
autoreconf --install
genera varios archivos de plantilla de los que Git debe realizar un seguimiento, incluidoMakefile.in
. Sólo es necesario ejecutarlo la primera vez.make install
instala:- el binario a
/usr/local/bin
README.md
a/usr/local/share/doc/automake_hello_world
- el binario a
En GitHub para que lo pruebes.
DESARROLLADOR ejecuta autoconf
y automake
:
- autoconf : crea un script de configuración
que se puede enviar (que el instalador ejecutará más tarde para crear el Makefile )
- 'autoconf' es un macroprocesador.
- Convierte configure.ac , que es un script de shell que utiliza instrucciones macro, en configure , un script de shell completo.
- automake : crea un archivo de datos Makefile.in
que se puede enviar (que la configuración leerá más tarde para crear el Makefile )
- Automake ayuda a crear archivos Makefiles portátiles y compatibles con el estándar GNU .
- 'automake' crea Makefile.in complejos a partir de Makefile.am simples
El INSTALADOR se ejecuta configure
y make
:sudo make install
./configure # Creates Makefile (from Makefile.in).
make # Creates the application (from the Makefile just created).
sudo make install # Installs the application
# Often, by default its files are installed into /usr/local
MAPA DE ENTRADA/SALIDA
La siguiente notación es aproximadamente: entradas --> programas --> salidas
DESARROLLADOR ejecuta estos:
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
configure.in --> autoconf -> configure (script) --- ( configure.in
depreciado. Utilice configure.ac)
Makefile.am -> automake -> Makefile.in ----------- (*. am = a uto m ake)
EL INSTALADOR ejecuta estos:
Makefile.in -> configurar -> Makefile (*. in = poner archivo)
Makefile -> make ----------> (coloca nuevo software en sus descargas o directorio temporal)
Makefile -> make install -> (coloca nuevo software en los directorios del sistema)
" autoconf es un paquete extensible de macros M4 que produce scripts de shell para configurar automáticamente paquetes de código fuente de software. Estos scripts pueden adaptar los paquetes a muchos tipos de sistemas tipo UNIX sin la intervención manual del usuario. Autoconf crea un script de configuración para un paquete a partir de un Archivo de plantilla que enumera las características del sistema operativo que el paquete puede usar, en forma de llamadas de macro M4".
" automake es una herramienta para generar automáticamente archivos Makefile.in que cumplen con los estándares de codificación GNU. Automake requiere el uso de Autoconf".
Manuales:
GNU AutoTools (El manual definitivo sobre estas cosas)
m4 (utilizado por autoconf)
configuración automática
autofabricación
Tutoriales gratuitos en línea:
- Usando herramientas automáticas GNU
Ejemplo:
El configure.ac principal utilizado para construir LibreOffice tiene más de 12k líneas de código (pero también hay otros 57 archivos configure.ac en subcarpetas).
A partir de esto, mi configuración generada tiene más de 41k líneas de código.
Y aunque Makefile.in y Makefile tienen solo 493 líneas de código. (Pero también hay 768 Makefile.in más en subcarpetas).
referencia :
Makefile.am: un archivo de entrada del usuario para crear automáticamente
configure.in: un archivo de entrada del usuario para autoconfigurar
autoconf genera configuración desde configure.in
automake genera Makefile.in desde Makefile.am
configurar genera Makefile desde Makefile.in
Por ejemplo:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in