¿Qué son Makefile.am y Makefile.in?

Resuelto Mask asked hace 14 años • 4 respuestas

Estos dos archivos se ven principalmente en proyectos de código abierto.

¿Para qué sirven y cómo funcionan?

Mask avatar Mar 28 '10 10:03 Mask
Aceptado

Makefile.ames un archivo definido por el programador y lo utiliza para automakegenerar el Makefile.inarchivo ( .amsignifica auto make ). El script que normalmente se ve en los archivos tar de origen utilizará para generar un archivo .configureMakefile.inMakefile

El configurescript en sí se genera a partir de un archivo definido por el programador llamado configure.aco configure.in(obsoleto). Prefiero .ac(para un auto conf ) ya que lo diferencia de los Makefile.inarchivos generados y de esa manera puedo tener reglas como make dist-cleancuá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 .acarchivo.

Lea más sobre GNU Autotools . Lea sobre makey Makefileprimero, luego aprenda sobre automake, autoconf, libtool, etc.

Sean A.O. Harney avatar Mar 28 '2010 03:03 Sean A.O. Harney

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 --installgenera varios archivos de plantilla de los que Git debe realizar un seguimiento, incluido Makefile.in. Sólo es necesario ejecutarlo la primera vez.

  • make installinstala:

    • el binario a/usr/local/bin
    • README.mda/usr/local/share/doc/automake_hello_world

En GitHub para que lo pruebes.

DESARROLLADOR ejecuta autoconfy automake:

  1. 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.
  1. 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 configurey 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.indepreciado. 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).

Elliptical view avatar Feb 12 '2018 17:02 Elliptical view

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
 avatar Jul 07 '2015 17:07