Vous trouverez ci-aprés une introduction aux outils automake / autoconf qui vous permettrons de créer des makefile sous linux en toute facilité.

Pré-requis :

* Base de programmation C ou C++.
* Connaissance de linux.
* Maîtrise des commandes shell de bases (manipulation de fichier et repertoire ).

Fonctionnement global

Les outils automake / autoconf permettent de crée un ou plusieurs fichiers Makefile et cela à partir de fichiers script.
          * Autoconf : outils qui permet de vérifier la portabilité en effectuant de nombreux tests sur les spécifités de la machine ou l'on désire installer notre application.
          * Automake : outils qui génère un makefile à partir de la description de la structure faite par le développeur.

Le schéma ci-dessous présente le fonctionnement de l'outil automake / autoconf :

processus d'autoconf automake

processus d'autoconf automake

Maintenant que nous vous avons fait une brève présentation d'automake / autoconf nous allons vous donner une méthode qui vous permettra de réaliser vos makefile facilement.

Méthode

La premiére des choses à faire est de créer un repertoire pour le projet que vous desirez réliser. Dans ce répertoire je vous conseille de créer un sous répertoire dans lequel vous mettrez vos sources.

Création du fichier configure.in :

Le premier des fichiers à générer est le fichier configure.in qui décrit les options et les caractéristiques du système à tester pour l'installation.
Pour commencer, lancer la commande autoscan qui génère configure.scan. Ce fichier sert de prototype au fichier configure.in. En effet, la commande autoscan cette commande scan les fichiers sources en cherchant les problèmes de portabilité.(bat > commande : représente les commandes à exécuter dans le shell)

bat > autoscan

une fois le fichier configure.scan crée une copie de celui-ci en le renomment configure.in c'est dans ce fichier que vous apporterez les modifications.

il vous faut ajouter plusieurs lignes:

AC_PROG_CC : qui permet de chercher le compilateur C de la machine
AM_INIT_AUTOMAKE(exemple, 1.0) : qui permet de définir le nom est le numéro de la version du package.

De plus, les lignes de commentaire commencent par dnl
les macros qui commencent par AC_ sont celles d'autoconf et celles qui commencent par AM_ sont celles d'automake.

exemple de fichier configure.in :

dnl Process this file with autoconf to produce a
dnl configure script.
AC_INIT(Makefile.am)

dnl Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
AC_PROG_RANLIB

dnl Automake
AM_INIT_AUTOMAKE(Tp1, 0.1)
AM_SANITY_CHECK

dnl Checks for libraries.

dnl Replace `main' with a function in -lglib:
AC_CHECK_LIB(glib, main)

dnl verifient la presence des librairies standard C
AC_DECL_SYS_SIGLIST
AC_HEADER_DIRENT

dnl Checks for header files.
AC_HEADER_STDC

dnl Checks for typedefs, structures, and compiler
dnl characteristics.
AC_C_CONST
AC_TYPE_SIZE_T

AC_PROG_INSTALL

dnl Checks for library functions.
AC_OUTPUT(Makefile src/Makefile)

Création du fichier aclocal.m4 :

Ce fichier est nécessaire lorsqu'on utilise Automake ou lorsque l'on désire utiliser c'est propres macros. Lancer la commande aclocal :

bat > aclocal

Création du fichier configure :

Une fois les fichiers configure.in et aclocal.m4 crée il suffit de lancer la commande autoconf pour obtenir le fichier configure:

bat > autoconf

Création du fichier makefile.am :

Ce fichier décrit comment le code du makefile doit être construit.
Quelques régles à suivre :

- Pour chaque makefile.am, on doit faire correspondre la macro AC_OUPUT dans configure.in
- Les lignes commençant par ## sont des lignes de commentaires
- On place un fichier makefile.am, dans le repertoire racine du projet et un autre dans chaque sous-répertoire qui contient des sources à compiler.

Le fichier makefile.am, du repertoire racine du projet est simple il comprend les 2 lignes suivante :

## subdirs est la variable qui indique tous les
## les sous repertoires qui contiennent des makefile.am
## dir doit être remplacé par le nom du sous repertoire

SUBDIRS = dir dir dir ...

## extra_dist indique le nom des fichiers qui seront à
## ajouter à la distribution crée avec la commande
## bat > make dist

EXTRA_DIST = autogen.sh configure

Dans chaque sous répertoire on doit créer un fichier makefile.am comme dans l'exemple ci-dessous :

## Programme a generer
bin_PROGRAMS = ExempleTeste

## Bibliotheque a generer
lib_LIBRARIES = libExemple.a

## création des librairies
libExemple_a_SOURCES = exemple.h exemple.c

## création du programme
ExempleTeste_SOURCES = teste.c teste.h
ExempleTeste_LDADD = libExemple.a

## ajoute des différent flag librairie nécessaire a la
## compilation du projet
LIBS= `pkg-config --libs-only-l glib-2.0` -lefence
CFLAGS =-g `pkg-config --cflags glib-2.0`
LDFLAGS =-g `pkg-config --libs-only-L glib-2.0`

- bin_PROGRAMS : définie les programmes à créer pour le projet. Aprés le = on place les diffèrents noms des programmes que l'on désire générer avec le makefile.
- lib_LIBRARIES : definie les librairies à créer pour le projet. Aprés le = on place les différents noms des librairies que l'on désire générer avec le makefile.
- xxxx_SOURCES : ici on définie les fichiers sources qui composent le programme ou la librairie. remplacer XXXX par le nom du programme ou de la librairie.
- xxxx_LDADD : ici on définie les librairies à ajouter aux programmes xxxx.
-les flags LIBS, CFLAGS, LDFLAGS sont utiliser pour tous les programmes et librairie du fichier makefiles.am. Mais ils peuvent être dé finie pour un programme ou une librairie pour cela il suffit de lui indiquer le nom que l'on désire définir exemple : xxxx_LIBS.

Ensuite il ne reste plus qu'à lancer la commande automake :

bat > automake -a

Création des makefiles :

Pour finir, il suffit de lancer la commande configure pour générer les makefiles.

bat > ./configure

C'est Fini :

Maintenant il ne vous reste plus qu'à compiler votre programme avec la commande make

Truc et Astuce

- Créer un fichier autogen.sh qui vous permettra de régénérer les fichiers Autoconf / Automake. N'oublier pas de faire un chmod pour qui ce fichier puisse s'exécute.


#! bin/sh

# Régénére les fichiers Autoconf/Automake

rm -f config.cache
rm -f config.log

echo " aclocal"
aclocal
autoconf
echo " autoconf FAIT"
automake -a
echo " automake FAIT"
./configure
echo " configure FAIT"

- Vous pouvez récuperer le repertoire type que j'ai crée en cliquant-ci.