Réponses:
Makefile.am
est un fichier défini programmeur et est utilisé par automake
de générer le Makefile.in
fichier (les .am
stands pour un uto m AKE). Le configure
script généralement vu dans les archives tar source utilisera le Makefile.in
pour générer un fichier Makefile
.
Le configure
script lui-même est généré à partir d'un fichier défini par le programmeur nommé soit configure.ac
ou configure.in
(obsolète). Je préfère .ac
(pour un uto c onf) car il le différencie des Makefile.in
fichiers générés et de cette façon je peux avoir des règles comme celle make dist-clean
qui s'exécute rm -f *.in
. Puisqu'il s'agit d'un fichier généré, il n'est généralement pas stocké dans un système de révision tel que Git, SVN, Mercurial ou CVS, mais plutôt le .ac
fichier.
En savoir plus sur GNU Autotools . Lisez à propos make
et d' Makefile
abord, puis en savoir plus sur automake
, autoconf
, libtool
, etc.
.in
extension signifie qu'elle est entrée pour configure
masser, pas un fichier final qui devrait être utilisé (par exemple avec make
). Si vous êtes curieux de savoir pourquoi cela semble "ridiculement" compliqué, essayez de lire: stackoverflow.com/a/26832773/939557 De nos jours, GitHub, etc. devenant un canal de distribution commun, certaines des hypothèses d'autoconf s'effondrent: les gens obtiennent la source directement depuis l'outil de contrôle du code source, plutôt que d'utiliser un tarball de distribution source créé par les mainteneurs.
Exemple simple
Adapté sans vergogne de: http://www.gnu.org/software/automake/manual/html_node/Creating-amhello.html et testé sur 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;
}
Usage
autoreconf --install
mkdir build
cd build
../configure
make
sudo make install
autoconf_hello_world
sudo make uninstall
Cela produit:
Hello world from automake_hello_world 1.0
Remarques
autoreconf --install
génère plusieurs fichiers modèles qui devraient être suivis par Git, y compris Makefile.in
. Il ne doit être exécuté que la première fois.
make install
installe:
/usr/local/bin
README.md
à /usr/local/share/doc/automake_hello_world
Sur GitHub pour que vous puissiez l'essayer.
autoconf
et automake
:1) autoconf - crée un script de configuration livrable
(que le programme d'installation exécutera plus tard pour créer le Makefile )
2) automake - crée shippable Makefile.in fichier de données
(qui configure sera ensuite lu pour faire le Makefile )
configure
, make
et 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 notation ci-dessous est à peu près: entrées -> programmes -> sorties
LE DÉVELOPPEUR les exécute:
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
configure.in -> autoconf -> configure (script) --- ( configure.in
déprécié. Utilisez configure.ac)
Makefile.am -> automake -> Makefile.in ----------- (*. Am = a uto m ake)
L'INSTALLATEUR les exécute:
Makefile.in -> configure -> Makefile (. * En = dans le fichier de vente)
Makefile -> make ----------> (met un nouveau logiciel dans vos téléchargements ou répertoire temporaire)
Makefile -> make install -> (met un nouveau logiciel dans les répertoires système)
" autoconf est un package extensible de macros M4 qui produit des scripts shell pour configurer automatiquement les packages de code source du logiciel. Ces scripts peuvent adapter les packages à de nombreux types de systèmes de type UNIX sans intervention manuelle de l'utilisateur. Autoconf crée un script de configuration pour un package à partir d'un fichier de modèle qui répertorie les fonctionnalités du système d'exploitation que le package peut utiliser, sous la forme d'appels de macro M4. "
" automake est un outil pour générer automatiquement des fichiers Makefile.in conformes aux normes de codage GNU. Automake nécessite l'utilisation d'Autoconf."
Manuels:
Tutoriels en ligne gratuits:
Le fichier configure.ac principal utilisé pour créer LibreOffice comprend plus de 12 000 lignes de code (mais il existe également 57 autres fichiers configure.ac dans les sous-dossiers.)
À partir de cela, ma configuration générée comprend plus de 41 000 lignes de code.
Et tandis que le Makefile.in et Makefile sont tous deux seulement 493 lignes de code. (Mais, il y a aussi 768 Makefile.in de plus dans les sous-dossiers.)
Makefile.am - un fichier d'entrée utilisateur pour créer automatiquement
configure.in - un fichier d'entrée utilisateur à autoconf
autoconf génère configure depuis configure.in
automake gérère Makefile.in de Makefile.am
configure génère un Makefile à partir de Makefile.in
Par exemple:
$]
configure.in Makefile.in
$] sudo autoconf
configure configure.in Makefile.in ...
$] sudo ./configure
Makefile Makefile.in
.in
veut dire?