Risposte:
Makefile.amè un file definito dal programmatore ed è utilizzato da automakeper generare il Makefile.infile di (i .amsta per un uto m Ake). Lo configurescript visto in genere nei tarball di origine utilizzerà il Makefile.inper generare un Makefile.
Lo configurescript stesso viene generato da un file definito dal programmatore denominato configure.aco configure.in(deprecato). Preferisco .ac(per un uto c onf) poiché lo differenzia dai Makefile.infile generati e in questo modo posso avere regole come quella make dist-cleanche 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 .acsarebbe il file.
Maggiori informazioni su GNU Autotools . Leggi makee Makefileprima, poi conoscere automake, autoconf, libtool, etc.
.inestensione significa che è un input per il configuremassaggio, 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 --installgenera diversi file modello che dovrebbero essere tracciati da Git, incluso Makefile.in. Deve essere eseguito solo la prima volta.
make install installa:
/usr/local/binREADME.md per /usr/local/share/doc/automake_hello_worldSu GitHub per farti provare.
autoconfe 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 , makee 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.indeprecato. 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?