Ces deux fichiers sont principalement vus dans des projets open source.
À quoi servent-ils et comment fonctionnent-ils?
Makefile.am
est un fichier défini par le programmeur utilisé par automake
pour générer le fichier Makefile.in
(le .am
signifie a uto m ake). Le script configure
généralement présent dans les archives source utilise le Makefile.in
pour générer un Makefile
.
Le script configure
est lui-même généré à partir d'un fichier défini par le programmeur nommé configure.ac
ou configure.in
(obsolète). Je préfère .ac
(pour a uto c onf) comme il le différencie des fichiers Makefile.in
générés, je peux ainsi avoir des règles telles que make dist-clean
qui 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 fichier .ac
.
En savoir plus sur GNU Autotools . En savoir plus sur make
et Makefile
, puis sur automake
, autoconf
, libtool
, etc.
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
LISEZMOI.md
Some doc.
configure.ac
AC_INIT([automake_hello_world], [1.0], [[email protected]])
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;
}
Utilisation
autoreconf --install
mkdir build
cd build
../configure
make
Sudo make install
autoconf_hello_world
Sudo make uninstall
Cela génère:
Hello world from automake_hello_world 1.0
Notes
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.
Makefile.am - un fichier d’entrée utilisateur à créer automatiquement
configure.in - un fichier d'entrée utilisateur à autoconf
autoconf génère configure à partir de configure.in
automake génère Makefile.in à partir de Makefile.am
configure génère Makefile à partir de Makefile.in
Pour ex:
$]
configure.in Makefile.in
$] Sudo autoconf
configure configure.in Makefile.in ...
$] Sudo ./configure
Makefile Makefile.in
DEVELOPER exécute ces:
1) autoconf - crée un fichier expédiable configure script (que l'installateur va exécuter faire le Makefile )
2) automake - crée un fichier expédiable Makefile.in (qui configure plus tard read faire le Makefile )
INSTALLER exécute ces:
./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
INPUTS -> PROGRAMMES -> SORTIES:
DEVELOPER exécute ces:
configure.in -> autoconf -> configure (script) configure. dans est amorti, utilisez maintenant configure.ac)
configure.ac -> autoconf -> configure (script) --- (*. ac = a uto c onf)
Makefile.am -> automake -> Makefile.in ----------- (*. am = a uto m ake)
INSTALLER exécute ces:
Makefile.in -> configure -> Makefile (*. dans = in fichier mis)
Makefile -> make -> (le nouveau logiciel dans votre répertoire de téléchargement ou temporaire)
Makefile -> make install -> (place le nouveau logiciel dans le répertoire système)
" Autoconf est un package extensible de macros M4 produisant des scripts Shell permettant de 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 utilisateur manuel. Autoconf crée un script de configuration pour un package à partir d'un fichier 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 permettant de générer automatiquement des fichiers Makefile.in conformes aux normes de codage GNU. Automake requiert l'utilisation d'Autoconf."
Manuels:
Faits intéressants:
Le principal configure.ac utilisé pour construire LibreOffice contient plus de 12k lignes de code (mais il existe également 57 autres configure.ac). fichiers dans des sous-dossiers.)
À partir de là, ma générée configure est supérieure à 41k lignes de code.
Alors que le Makefile.in et Makefile sont tous deux 493 lignes de code. ( Mais, il y a aussi 768 autres Makefile.in dans les sous-dossiers.)