7. Gérez votre projet

Le projet bonjour va probablement prendre de l'ampleur. Voici quelques cas simples et courants que vous pouvez être amenés à rencontrer.

7.1. Ajouter des options au compilateur

Ajouter des options pour modifier le comportement du compilateur ou celui de l'éditeur de liens est chose courante. Vous pouvez ainsi compiler avec l'option -g afin de pouvoir déboguer plus facilement avec gdb. Ce genre d'options ne doit pas apparaître dans le projet et c'est à la personne qui compile de les indiquer. Pour cela, elle profite des variables d'environnement CPPFLAGS pour le préprocesseur, CFLAGS pour le compilateur et LDFLAGS pour l'éditeur de liens. Cela donne :

$ ./configure
$ make CFLAGS="-O2"
$ make install-strip
			

Nous générons ainsi un exécutable optimisé, et l'installons avec la cible install-strip qui supprime tout ce qui est inutile dans la table des symboles. Pour en savoir plus sur cette opération, voyez la page de manuel de l'outil strip.

Il est néanmoins une option qu'il peut être souhaitable d'indiquer systématiquement au compilateur : l'option -Wall. En présence de celle-ci, le compilateur affiche tous les messages d'avertissement qu'il peut (ou presque, voyez la page de manuel de gcc et les options commençant par -W). Pour insérer cette option, nous modifions la variable CFLAGS via le fichier configure.ac et ajoutons ceci à la fin, avant la ligne AC_CONFIG_FILES :

if test "x$GCC" = "xyes"; then
  CFLAGS="$CFLAGS -Wall"
fi
			

Note

Cette opération peut ajouter deux fois ou plus l'option -Wall. Mais le compilateur gcc ne vous en tiendra pas rigueur. C'est pourquoi nous ne compliquons pas ces trois lignes avec un code qui teste la présence de l'option dans CFLAGS.

7.2. Ajouter ou supprimer un fichier source

Imaginons que nous ajoutions une nouvelle fonctionnalité, par exemple l'appel à la fonction plouff() définie dans le fichier src/plouf.c. Nous disposons aussi du fichier d'en-têtes src/plouf.h. Pour prendre en compte ces deux nouveaux fichiers, éditez le fichier src/Makefile.am et ajoutez les noms des deux nouveaux fichiers à ceux existant déjà, avant ou après, peu importe. Voici le nouveau fichier src/Makefile.am :

bin_PROGRAMS=bonjour

bonjour_SOURCES= \
	main.c \
	plouf.c plouf.h \
	afficher.c afficher.h
			

Comme vous venez de modifier un fichier Makefile.am, vous devez relancer automake. Avec les versions récentes d'automake, les fichiers Makefile sont générés de telle manière qu'une modification dans un fichier Makefile.am est détectée et en exécutant make, vous regénérez tous les fichiers impactés par votre modification. La suppression d'un fichier source est similaire à celle d'un ajout : vous modifiez la variable bonjour_SOURCES et la suite ne change pas.

7.3. Ajouter le support d'une bibliothèque

Ajouter le support d'une bibliothèque est très simple lorsque celle-ci est placée dans un endroit standard. Il vous suffit d'ajouter une ligne dans le fichier configure.ac. Voici celle qui vous permet d'utiliser la bibliothèque mathématique libm :

AC_SEARCH_LIBS(pow, m)
			

En général, l'absence d'une bibliothèque devrait provoquer l'arrêt du script configure. Le troisième argument de AC_SEARCH_LIBS est l'action à effectuer si le test est positif, et le quatrième celle si le test est négatif. Nous pouvons profiter de ce dernier ainsi :

AC_SEARCH_LIBS(pow, m, [], [exit])
			

Vous pouvez aussi afficher un message à la place d'une simple sortie. Pour cela, utilisez AC_MSG_ERROR; Voici le résultat pour libz :

AC_SEARCH_LIBS(gzopen, z, [], [
	AC_MSG_ERROR([zlib est manquante])
])
			

Attention

Une modification de configure.ac nécessite la relance d'aclocal, d'autoconf et d'automake.

7.4. Faire le nettoyage

Qu'entendons-nous par nettoyage ? S'il s'agit de supprimer tout ce qui a été compilé, principalement les fichiers objets (dont extension est .o), exécutez simplement make clean. SI vous voulez par contre supprimer aussi les fichiers générés suite à l'exécution de configure, lancez la commande make distclean.

Vous pouvez aussi vouloir faire le grand nettoyage et ne garder que les fichiers sources, ainsi que le strict nécessaire à autoconf et automake. Dans ce cas, supprimez tout sauf :

  • les sources de votre code (typiquement les fichiers d'extension .c et .h; notez que le fichier ${racine}/config.h est généré par configure : vous pouvez le supprimer aussi) ;

  • les fichiers Makefile.am ;

  • le fichier configure.ac ;

  • les fichiers ChangeLog, NEWS, README et AUTHORS ;

  • si vous les avez modifiés, les fichiers COPYING et INSTALL.

Après un tel ménage, il ne reste dans notre projet bonjour plus que les fichiers suivants :

$ find .
.
./AUTHORS
./ChangeLog
./configure.ac
./Makefile.am
./NEWS
./README
./src
./src/afficher.c
./src/afficher.h
./src/main.c
./src/Makefile.am

			

7.5. Générer un paquet bonjour-0.1.tar.gz

Pour générer un tel paquet, nous pensons à la commande tar du répertoire ${racine} renommée au préalable bonjour-0.1. Mais il y a beaucoup plus simple : exécutez make dist. Vous obtenez votre paquet, avec pour nom et numéro de version ce que vous avez défini dans configure.ac sur la ligne AC_INIT.

Cela n'est pas encore la meilleure méthode. En effet, le plus propre est de lancer la commande make distcheck. Ainsi, non seulement vous générez le paquet souhaité, mais il est aussi testé pour vous, dans un répertoire différent de celui de développement. Vous mettez ainsi en évidence s'il manque des fichiers, présents dans l'arborescence de développement, mais non déclarés dans les fichiers Makefile.am.

Astuce

Si vous voulez générer un fichier bonjour-0.1.tar.bz2, exécutez la commande make dist-bzip2. Vous pouvez obtenir les cibles possibles avec un simple grep "^dist-" Makefile. Celles d'automake-1.8.5 sont les suivantes : dist-gzip, dist-bzip2, dist-tarZ, dist-shar et dist-zip.

création est mise à disposition sous un contrat Creative Commons