Respuestas:
Makefile.am
es un archivo definido por el programador y es utilizado por automake
para generar el Makefile.in
archivo ( .am
significa un uto m ake). El configure
script que se ve típicamente en los tarballs de origen usará el Makefile.in
para generar a Makefile
.
El configure
script en sí se genera a partir de un archivo definido por el programador llamado configure.ac
o configure.in
(en desuso). Prefiero .ac
(para un uto c onf) ya que lo diferencia de los Makefile.in
archivos generados y de esa manera puedo tener reglas como las make dist-clean
que se ejecutan 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 que el .ac
archivo sí lo estaría.
Lea más sobre GNU Autotools . Lea sobre make
y Makefile
en primer lugar, a continuación, aprender sobre automake
, autoconf
, libtool
, etc.
.in
extensión significa que es una entrada para configure
masajear, no un archivo final que debería usarse (por ejemplo, con make
). Si tiene curiosidad de por qué esto parece "ridículamente complicado", intente leer: stackoverflow.com/a/26832773/939557 En estos días con GitHub, etc., convirtiéndose en un canal de distribución común, algunos de los supuestos de autoconf se están desmoronando: la gente está obteniendo la fuente directamente desde la herramienta de control de código fuente, en lugar de usar un tarball de distribución de fuente creado por mantenedores.
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.
configure.ac
AC_INIT([automake_hello_world], [1.0], [bug-automake@gnu.org])
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 Git debe rastrear, incluidos Makefile.in
. Solo necesita ejecutarse la primera vez.
make install
instala:
/usr/local/bin
README.md
a /usr/local/share/doc/automake_hello_world
En GitHub para que lo pruebes.
autoconf
y automake
:1) autoconf : crea un script de configuración
que se puede enviar (que el instalador ejecutará más adelante para crear el Makefile )
2) automake : crea un archivo de datos Makefile.in
que se puede enviar (que configure luego se leerá para crear el Makefile )
configure
, make
y 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
La notación a continuació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. Use configure.ac)
Makefile.am -> automake -> Makefile.in ----------- (*. Am = a uto m ake)
INSTALADOR ejecuta estos:
Makefile.in -> Configurar -> Makefile (. * En = en el archivo de venta)
Makefile -> make ----------> (coloca un nuevo software en sus descargas o directorio temporal)
Makefile -> make install -> (coloca un 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 similares a UNIX sin 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:
Tutoriales en línea gratuitos:
El archivo configure.ac principal utilizado para compilar 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 es de más de 41k líneas de código.
Y aunque Makefile.in y Makefile son solo 493 líneas de código. (Pero también hay 768 Makefile.in más en subcarpetas).
Makefile.am: un archivo de entrada del usuario para automatizar
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 ej .:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
.in
?