Personal tools
You are here: Home Ressources Tutoriel Automake
Document Actions

Tutoriel Automake

by François Rioult last modified 2008-10-10 22:56

Ce tutoriel concerne l'utilisation d'automake-1.4 pour Linux, testé sur Ubuntu.

Automake gère la production automatique de makefile et est particulièrement précieux pour la mise au point et la distribution de programmes écrits en C++. Il utilise pour cela des fichiers automake.am qui contiennent la liste des programmes à produire et les fichiers utilisés pour leur compilation. Selon le fichier configure.ac, un utilitaire de configuration est créé avec les caractéristiques de la machine locale. Une fois la compilation effectuée avec make, l'installation des binaires est déclenchée par make install.

Cette présentation prend l'exemple de la création d'une distribution nommée "radio" contenant un programme "hello !" en C++ et un script bash. Dans le répertoire du projet, on créera un répertoire src, destiné à contenir les sources.


Pré-requis

apt-get install automake1.4
apt-get install automake1.9

Si on veut gérer des librairies :

apt-get install libtool

Créer les fichiers suivants :

touch NEWS README AUTHORS ChangeLog

Définir le configure.ac

AC_INIT(src/bash/mvballade.sh)  # préciser le nom d'un des fichiers du projet
AM_INIT_AUTOMAKE(radio,1.0) # nom et numéro de version
AM_CONFIG_HEADER(config.h)
FXXFLAGS="-Wall -O" # définition de la variable FXXFLAGS
AC_SUBST(FXXFLAGS) # inscription (propagation) de la variable
AC_PROG_CXX # pour faire du c++
AC_PROG_INSTALL # pour faire des installations

Uniquement si on utilise les librairies :

AC_PROG_LIBTOOL        # libtool : gestion des librairies .o
AC_PROG_AWK            # pour faire du awk
AC_OUTPUT(Makefile
src/Makefile
src/bash/Makefile
)
# liste des makefile à produire

Créer les Makefile.am (makefile de haut niveau)

  • dans le répertoire courant :
SUBDIRS = src 
  • dans src, indiquer simplement la liste des sous-répertoires qui contiennent vos sources. Ici, un script bash et un programme cpp.
SUBDIRS = bash cpp
  • dans src/bash :
bin_SCRIPTS = mvballade.sh
EXTRA_DIST = mvballade.sh
  • dans cpp :
bin_PROGRAMS = test
test_SOURCES = test.cpp
INCLUDES = -I$(top_srcdir)
CXXFLAGS = $(FXXFLAGS)

L'arborescence de départ est la suivante :

.
|-- AUTHORS
|-- ChangeLog
|-- Makefile.am
|-- NEWS
|-- README
|-- configure.ac
|-- doc
| `-- aide.txt
`-- src
|-- Makefile
|-- Makefile.am
|-- Makefile.in
|-- bash
| |-- Makefile
| |-- Makefile.am
| |-- Makefile.in
| `-- mvballade.sh
`-- cpp
|-- Makefile
|-- Makefile.am
|-- Makefile.in
|-- test
`-- test.cpp

Dans un shell, initialiser le projet (production des makefile) à l'aide des commandes suivantes (recommencez pour toute modification du configure.ac) :

aclocal-1.4       # produit les localisations ? aclocal.m4
autoconf # produit le fichier configure (configuration en shell)
autoheader # produit config.h.in
automake-1.4 -a # installe certains répertoire (-a pour les créer s'ils n'existent pas)
configure --prefix=/home/frioult/radio # génère les Makefile à partir des Makefile.in (ou am)
# --prefix indique l'endroit où les fichiers doivent être installés

La structure du répertoire est maintenant :

.
|-- AUTHORS
|-- COPYING -> /usr/share/automake-1.4/COPYING
|-- ChangeLog
|-- INSTALL -> /usr/share/automake-1.4/INSTALL
|-- Makefile
|-- Makefile.am
|-- Makefile.in
|-- NEWS
|-- README
|-- aclocal.m4
|-- autom4te.cache
| |-- output.0
| |-- requests
| `-- traces.0
|-- config.guess -> /usr/share/libtool/config.guess
|-- config.h
|-- config.h.in
|-- config.log
|-- config.status
|-- config.sub -> /usr/share/libtool/config.sub
|-- configure
|-- configure.ac
|-- doc
| `-- aide.txt
|-- install-sh -> /usr/share/automake-1.4/install-sh
|-- libtool
|-- ltmain.sh -> /usr/share/libtool/ltmain.sh
|-- missing -> /usr/share/automake-1.4/missing
|-- mkinstalldirs -> /usr/share/automake-1.4/mkinstalldirs
|-- src
| |-- Makefile
| |-- Makefile.am
| |-- Makefile.in
| |-- bash
| | |-- Makefile
| | |-- Makefile.am
| | |-- Makefile.in
| | `-- mvballade.sh
| `-- cpp
| |-- Makefile
| |-- Makefile.am
| |-- Makefile.in
| |-- test
| `-- test.cpp
|-- stamp-h
`-- stamp-h.in

Les commandes sont alors :

make           # pour construire le projet
make install # pour l'installer
make distcheck # pour vérifer si on peut créer une distribution et la créer
make dist # pour simplement la créer sans vérification
make clean

Liens utiles :

  • En Français :
http://www.enseeiht.fr/lima/irt/membres/boyer/Automake-Autoconf/Automake.htm
http://www.pallier.org/ressources/autoconf/autoconfig.pdf
  • En Anglais :
http://www.openismus.com/documents/linux/automake/automake.shtml

Téléchargement :

Le fichier fourni ici est le résultat de ce tutoriel.

« June 2011 »
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
 

Powered by Plone, the Open Source Content Management System

This site conforms to the following standards: