web-dev-qa-db-fra.com

Que sont Makefile.am et Makefile.in?

Ces deux fichiers sont principalement vus dans des projets open source.

À quoi servent-ils et comment fonctionnent-ils?

307
Mask

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.

354
Sean A.O. Harney

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:

    • le binaire à /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 à 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
14
user966588

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.)

11
Elliptical view