Risposte:
Makefile.am
è un file definito dal programmatore ed è utilizzato da automake
per generare il Makefile.in
file di (i .am
sta per un uto m Ake). Lo configure
script visto in genere nei tarball di origine utilizzerà il Makefile.in
per generare un Makefile
.
Lo configure
script stesso viene generato da un file definito dal programmatore denominato configure.ac
o configure.in
(deprecato). Preferisco .ac
(per un uto c onf) poiché lo differenzia dai Makefile.in
file generati e in questo modo posso avere regole come quella make dist-clean
che gira rm -f *.in
. Poiché si tratta di un file generato, in genere non viene archiviato in un sistema di revisione come Git, SVN, Mercurial o CVS, piuttosto .ac
sarebbe il file.
Maggiori informazioni su GNU Autotools . Leggi make
e Makefile
prima, poi conoscere automake
, autoconf
, libtool
, etc.
.in
estensione significa che è un input per il configure
massaggio, non un file finale che dovrebbe essere usato (ad es. Con make
). Se sei curioso di sapere perché questo sembra "ridicolmente" complicato, prova a leggere: stackoverflow.com/a/26832773/939557 In questi giorni con GitHub, ecc. Che sta diventando un canale di distribuzione comune alcuni dei presupposti di autoconf si stanno rompendo: le persone stanno ottenendo l'origine direttamente dallo strumento di controllo del codice sorgente, anziché utilizzare un tarball di distribuzione dell'origine creato dai manutentori.
Semplice esempio
Adattato senza vergogna da: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html e testato su 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
Questo produce:
Hello world from automake_hello_world 1.0
Appunti
autoreconf --install
genera diversi file modello che dovrebbero essere tracciati da Git, incluso Makefile.in
. Deve essere eseguito solo la prima volta.
make install
installa:
/usr/local/bin
README.md
per /usr/local/share/doc/automake_hello_world
Su GitHub per farti provare.
autoconf
e automake
:1) autoconf - crea shippable configure sceneggiatura
(che il programma di installazione in seguito eseguito per rendere il Makefile )
2) automake : crea Makefile.in shippable file di dati
(che configura leggerà in seguito per creare il Makefile )
configure
, make
e 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 notazione di seguito è approssimativamente: input -> programmi -> output
DEVELOPER esegue questi:
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
configure.in -> autoconf -> configure (script) --- ( configure.in
deprecato. Usa configure.ac)
Makefile.am -> automake -> Makefile.in ----------- (*. Am = a uto m ake)
INSTALLER esegue questi:
Makefile.in -> configura -> Makefile (*. In = in put file)
Makefile -> make ----------> (inserisce nuovo software nei download o nella directory temporanea)
Makefile -> make install -> (inserisce nuovo software nelle directory di sistema)
" autoconf è un pacchetto estensibile di macro M4 che producono script di shell per configurare automaticamente i pacchetti di codice sorgente del software. Questi script possono adattare i pacchetti a molti tipi di sistemi simili a UNIX senza intervento manuale dell'utente. Autoconf crea uno script di configurazione per un pacchetto da un file modello che elenca le funzionalità del sistema operativo che il pacchetto può utilizzare, sotto forma di chiamate macro M4. "
" automake è uno strumento per generare automaticamente file Makefile.in conformi agli standard di codifica GNU. Automake richiede l'uso di Autoconf."
manuali:
Tutorial online gratuiti:
Il principale configure.ac usato per costruire LibreOffice è oltre 12k righe di codice (ma ci sono anche altri 57 file configure.ac nelle sottocartelle.)
Da ciò la mia configurazione generata è di oltre 41k righe di codice.
E mentre Makefile.in e Makefile sono entrambi solo 493 righe di codice. (Ma ci sono anche 768 più Makefile.in nelle sottocartelle.)
Makefile.am - un file di input dell'utente per automake
configure.in - un file di input dell'utente per autoconf
autoconf genera configure da configure.in
automake gererates Makefile.in da Makefile.am
configure genera Makefile da Makefile.in
Ad esempio:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
.in
?