Antworten:
Makefile.am
ist eine vom Programmierer definierte Datei und wird von verwendet automake
, um die Makefile.in
Datei zu generieren (die .am
steht für ein uto m ake). Das configure
Skript, das normalerweise in Quell-Tarballs angezeigt wird, verwendet das Makefile.in
, um ein zu generierenMakefile
.
Das configure
Skript selbst wird aus einer vom Programmierer definierten Datei mit dem Namen entweder configure.ac
oder configure.in
(veraltet) generiert . Ich bevorzuge .ac
(für ein uto c onf), da es es von den generierten Makefile.in
Dateien unterscheidet und auf diese Weise Regeln haben kann, wie z. B. make dist-clean
welche ausgeführt werden rm -f *.in
. Da es sich um eine generierte Datei handelt, wird sie normalerweise nicht in einem Revisionssystem wie Git, SVN, Mercurial oder CVS gespeichert, sondern in der.ac
gespeichert Datei.
Lesen Sie mehr über GNU Autotools . Lesen Sie mehr über make
und Makefile
zuerst, dann lernen automake
, autoconf
, libtool
etc.
.in
Erweiterung bedeutet, dass es sich um eine Eingabe für configure
die Massage handelt und nicht um eine endgültige Datei, die verwendet werden sollte (z make
. B. mit ). Wenn Sie neugierig sind, warum dies "lächerlich" kompliziert erscheint, lesen Sie: stackoverflow.com/a/26832773/939557 Heutzutage, da GitHub usw. zu einem gemeinsamen Vertriebskanal wird, brechen einige der Annahmen von autoconf zusammen: Menschen erhalten die Quelle direkt aus dem Quellcode-Steuerungs-Tool, anstatt einen von Betreuern erstellten Quellverteilungs-Tarball zu verwenden.
Einfaches Beispiel
Schamlos angepasst von: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html und getestet unter 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;
}
Verwendungszweck
autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autoconf_hello_world
sudo make uninstall
Dies gibt aus:
Hello world from automake_hello_world 1.0
Anmerkungen
autoreconf --install
generiert mehrere Vorlagendateien, die von Git verfolgt werden sollen, einschließlich Makefile.in
. Es muss nur beim ersten Mal ausgeführt werden.
make install
installiert:
/usr/local/bin
README.md
zu /usr/local/share/doc/automake_hello_world
Auf GitHub können Sie es ausprobieren.
autoconf
und automake
:1) autoconf - erstellt shippable configure Skript
(die das Installationsprogramm wird später ausgeführt werden, um das machen Makefile )
2) auto - erstellt shippable Makefile.in Datendatei
(die configure später lesen , um das machen Makefile )
configure
, make
und 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
Die folgende Notation lautet ungefähr: Eingänge -> Programme -> Ausgänge
DEVELOPER führt diese aus:
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
configure.in -> autoconf -> configure (script) --- ( configure.in
abgeschrieben. Verwenden Sie configure.ac)
Makefile.am -> automake -> Makefile.in ----------- (*. Am = a uto m ake)
INSTALLER führt diese aus:
Makefile.in -> configure -> Makefile (*. In = in put file)
Makefile -> make ----------> (legt neue Software in Ihren Downloads oder im temporären Verzeichnis ab)
Makefile -> make install -> (legt neue Software in Systemverzeichnissen ab)
" autoconf ist ein erweiterbares Paket von M4-Makros, die Shell-Skripte zum automatischen Konfigurieren von Software-Quellcode-Paketen erstellen. Diese Skripte können die Pakete ohne manuellen Benutzereingriff an viele Arten von UNIX-ähnlichen Systemen anpassen. Autoconf erstellt ein Konfigurationsskript für ein Paket aus a Vorlagendatei, in der die Betriebssystemfunktionen aufgeführt sind, die das Paket in Form von M4-Makroaufrufen verwenden kann. "
" automake ist ein Tool zum automatischen Generieren von Makefile.in-Dateien, die den GNU-Codierungsstandards entsprechen. Automake erfordert die Verwendung von Autoconf."
Anleitungen:
Kostenlose Online-Tutorials:
Der Haupt configure.ac die zum Erstellen von LibreOffice verwendet wird, besteht aus mehr als 12.000 Codezeilen (es befinden sich jedoch auch 57 andere configure.ac-Dateien in Unterordnern.)
Daraus meine generierte Konfiguration ergibt sich eine über 41.000 Codezeilen.
Und während Makefile.in und Makefile nur 493 Codezeilen sind. (Aber es gibt auch 768 weitere Makefile.ins in Unterordnern.)
Referenz :
Makefile.am - eine Benutzereingabedatei, die automatisch erstellt werden soll
configure.in - eine Benutzereingabedatei für die automatische Konfiguration
autoconf generiert configure aus configure.in
automake erstellt Makefile.in von Makefile.am
configure generiert Makefile aus Makefile.in
Zum Beispiel:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
.in
?