makefile autotools automake

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



autotools automake (4)

reference :

Makefile.am - un archivo de entrada de usuario para hacer automake

configure.in - un archivo de entrada de usuario para autoconf

autoconf genera configure desde configure.in

automake gererates Makefile.in de Makefile.am

configure genera Makefile desde Makefile.in

Por ejemplo:

$] configure.in Makefile.in $] sudo autoconf configure configure.in Makefile.in ... $] sudo ./configure Makefile 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 es utilizado por automake para generar el archivo Makefile.in (la .am significa un uto m ake). La secuencia de comandos de configure normalmente se ve en los archivos fuente usa el Makefile.in para generar un Makefile .

El script de configure sí mismo se genera a partir de un archivo definido por el programador denominado configure.ac o configure.in (en desuso). Prefiero .ac (para un uto c onf) ya que lo diferencia de los archivos Makefile.in generados y de esa manera puedo tener reglas como make dist-clean que 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, en lugar del archivo .ac .

Lea más sobre GNU Autotools . Lea primero sobre make y Makefile , luego aprenda sobre automake , autoconf , libtool , etc.


DESARROLLADOR ejecuta estos:

1) autoconf : crea un script de configuración que se puede enviar (que el instalador ejecutará para hacer el Makefile )
2) automake - crea Makefile.in que se puede enviar (que la configuración se leerá más adelante para hacer el Makefile )

INSTALADOR ejecuta estos:

1) ./ configure - crea el Makefile (desde Makefile.in ).
2) make : crea la aplicación (desde el Makefile que se acaba de crear).
3) sudo make install - instala la aplicación - Por defecto, los archivos se instalan (a menudo) en / usr / local.

ENTRADAS -> PROGRAMAS -> SALIDAS:

DESARROLLADOR ejecuta estos:

configure.in -> autoconf -> configure (script) <---- ¡Nota! configure.in se deprecia.
configure.ac -> autoconf -> configure (script) <---- Ahora use configure.ac / (*. ac = a uto c onf)

Makefile.am -> automake -> Makefile.in / (*. Am = a uto m ake)

INSTALADOR ejecuta estos:

Makefile.in -> configure -> Makefile (*. In = in put file)

Makefile -> make -> (el nuevo software en sus descargas o directorio temporal)
Makefile -> make install -> (coloca el nuevo software en el directorio del sistema)

" Autoconf es un paquete extensible de macros M4 que produce scripts de shell para configurar automáticamente los paquetes de código fuente del software. Estos scripts pueden adaptar los paquetes a muchos tipos de sistemas similares a UNIX sin la intervención manual del usuario. Autoconf crea un script de configuración para un paquete desde 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:

Datos interesantes:
El principal configure.ac que se usa para crear LibreOffice tiene más de 12k líneas de código (pero también hay otros 57 archivos configure.ac en subcarpetas).
De esto mi configuración generada es más de 41k líneas de código.
Mientras que Makefile.in y Makefile son solo 493 líneas de código. (Pero, también hay 768 más Makefile.in''s en subcarpetas).


Ejemplo simple

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

README.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 / main.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 autoconf_hello_world sudo make uninstall

Esto produce:

Hello world from automake_hello_world 1.0

Notas

  • autoreconf --install genera varios archivos de plantilla que deben ser rastreados por Git, incluido Makefile.in . Solo necesita ejecutarse la primera vez.

  • make install instalación:

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

En GitHub para que lo pruebes.