Le document suivant est une introduction pratique à autoconf. il montre un projet très simple qui contient néanmoins tout ce que l'on va rencontrer habituellement dans un projet en C/C++.
Il faut créer un fichier configure.ac et un ou en géneral plusieurs fichiers Makefile.am.
Lors de la création d'un nouveau projet, on fait un copier/coller d'un fichier configure.ac d'un autre projet ressemblant et on l'édite afin de le modifier.
On va ensuite créer (plutôt copier puis modifier en général) un Makefile.am dans chaque répertoire. On n'oublie pas de mettre à jour SUBDIRS qui mentionne les sous répertoires directs.
On duplique ensuite un fichier bootstrap (Ce fichier ne change pas en général). Le rôle de ce fichier est en gros de créer le script configure. Par la suite, on lance le script configure, avec éventuellement des options (La plus connue est sans doute --prefix pour changer le répertoire d'installation)
Les Makefile.am ont grosso modo le même format que les fichiers Makefile. Les noms des 'targets' sont composés de préfixes (indique le répertoire d'installation) et de suffixes (indique le type de composant que l'on compile) normalisés (exemple bin_programs=toto, ou noinst_LTLIBRARIES=libgaga.la), le but étant de réaliser les tâches communes comme le make install.
L'énorme avantage d'utiliser autoconf est que le package créé est standard. En particulier, il est possible de créer une distribution (le tar.gz de votre projet) en faisant $ make dist.
Et bien sûr, le package se compile et s'installe de manière classique avec le trio habituel ./configure, make, make install.
Télécharger les sources ci-dessous et décompresser les dans un répertoire.
$ tar xvzf autoconf_demo.tar.gz $ cd autoconf_demo
Ce projet contient 4 sous répertoires
Afin de montrer comment on peut faire pour lancer un configure (pas forcément à vous, par exemple d'une librairie que vous avez récupéré sur internet), on a créé un package minimal, otherlib.
On doit commencer par générer le script configure (dans le cas d'un package récupéré sur internet, cela serait déjà fait)
$ cd externals/otherlib $ ./bootstrap $ ls configure
Voilà, cela a du générer le configure.
On remonte dans autoconf_demo et on génère le configure :
$ cd ../.. $ ./bootstrap
On lance le script configure et on compile le projet :
$ ./configure --prefix=`pwd`/test --with-my-custom-arg=" coucou les amis" $ make $ make install
On regarde ce qui est installé et on teste le programme :
$ cd test $ ls $ cd bin $ ./autoconf_demo