Que sont Makefile.am et Makefile.in?

Ces deux fichiers sont principalement visibles dans les projets open source.

À quoi servent-ils et comment fonctionnent-ils?

Makefile.am est un fichier défini par le programmeur et est utilisé par automake pour générer le fichier Makefile.in (le .am signifie un uto mke). Le script de configure généralement vu dans les archives source utilisera le Makefile.in pour générer un Makefile .

Le script configure lui-même est 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 un uto c onf) car il le différencie des fichiers Makefile.in générés et de cette façon, je peux avoir des règles telles que make dist-clean qui exécute rm -f *.in . Comme 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 . Lisez d’abord sur make et le Makefile , puis sur libtool , autoconf , libtool , etc.

Exemple simple

Sans honte, adapté 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  #include  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 doivent être suivis par Git, y compris Makefile.in . Il suffit de l’exécuter la première fois.

  • make install installation:

    • le binary vers /usr/local/bin
    • README.md à /usr/local/share/doc/automake_hello_world

Sur GitHub pour que vous puissiez l’essayer.

référence :

Makefile.am – un fichier d’entrée utilisateur à automake

configure.in – un fichier d’entrée utilisateur à autoconf


autoconf génère configure à partir de configure.in

automake redéfinit Makefile.in à partir de Makefile.am

configure génère un 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 script de configuration pouvant être expédié (que le programme d’installation exécutera pour créer le fichier Makefile )
2) automake – crée un Makefile.in pouvant être expédié (que configure plus tard lit pour créer le Makefile )

L’INSTALLATEUR exécute ces:

1) ./ configure – crée le Makefile (à partir de Makefile.in ).
2) make – crée l’application (à partir du Makefile qui vient d’être créé).
3) sudo make install – installe l’application – Par défaut, les fichiers sont (souvent) installés dans / usr / local.


INPUTS -> PROGRAMMES -> SORTIES:

DEVELOPER exécute ces:

configure.in -> autoconf -> configure (script) <---- Remarque! configure.in est déprécié.
configure.ac -> autoconf -> configure (script) <---- Utilisez maintenant configure.ac / (*. ac = a uto c onf)

Makefile.am -> automake -> Makefile.in / (*. Am = a uto m ake)

L’INSTALLATEUR exécute ces:

Makefile.in -> configure -> Makefile (*. In = dans le fichier put)

Makefile -> make -> (le nouveau logiciel dans vos téléchargements ou votre répertoire temporaire)
Makefile -> make install -> (met un nouveau logiciel dans le répertoire système)


Autoconf est un package extensible de macros M4 qui produisent des scripts shell pour configurer automatiquement les packages de code source du logiciel. Ces scripts peuvent adapter les packages à de nombreux systèmes UNIX sans intervention manuelle de l’utilisateur. Autoconf crée un script de configuration à 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 permettant de générer automatiquement des fichiers Makefile.in conformes aux normes de codage GNU. Automake nécessite l’utilisation d’Autoconf.”

Manuels:

  • m4 (utilisé par autoconf)
  • autoconf
  • automake

Faits intéressants:
Le principal configure.ac utilisé pour construire LibreOffice est plus de 12 000 lignes de code (mais il y a aussi 57 autres fichiers configure.ac dans les sous-dossiers).
À partir de cela, ma configuration générée dépasse 41 000 lignes de code.
Alors que Makefile.in et Makefile ne sont que 493 lignes de code. (Mais il y a aussi 768 autres fichiers Makefile.in dans les sous-dossiers.)