« Autotools en C/Programme exemple » : différence entre les versions

Contenu supprimé Contenu ajouté
DCimarosa (discussion | contributions)
Ajouts du cours
Balise : Informations personnelles
Ligne 1 :
Nous verrons ici les utilisations les plus simples (par ex : ajouter un fichier), qui sont aussi les plus quotidiennes pour un développeur.
On va utiliser un simple programme comportant deux fichiers, pour comprendre comment gérer plusieurs fichiers. Il s'agit d'un programme simple qui ne sert qu'à afficher "bonjour" et ne comporte qu'une fonction externe.
 
==Préparations du programme ''Affichage''==
<source lang=c>
Nous allons créer un programme ''Affichage'' qui produira un simple "Bonjour" dans le terminal.
/* fonction_affichage.c */
Par respect pour les autres développeurs, nous suivons ici les standards de programmation (notamment GNU). Il est en effet habituel de mettre son code dans un répertoire du même nom que le programme. À l'intérieur de ce répertoire nous placerons le code source dans ''src/'' (ultérieurement, nous créerons ''docs/'' pour la documentation, ''tests/'', ''po/'' pour l'internationalisation du programme, etc.)
int affichage(char *phrase)
 
{
Notre arborescence pour l'instant :
fprintf(stdin, "%s", phrase);
<source lang=bash>
return 0;
affichage/
}
src/
</source>
 
On crée le fichier source en langage C dans ''src/'' :
 
<source lang=cbash>
affichage/
/* entête fonction_affichage.h */
src/
int affichage(char *phrase);
programme.c
</source>
 
Et éditons-le pour y placer notre code trivial :
 
<source lang=c>
/* programme.c */
intvoid main()
{
affichageprintf("Bonjour\n");
return EXIT_SUCCESS;
}
</source>
 
En résumé, nous avons trois fichiers : ''fonction_affichage.c'', ''fonction_affichage.h'' et ''programme.c''.
 
Pour commencer avec les Autotools, on va créer un répertoire pour le projet par exemple ''affichage''. À l'intérieur de celui-ci, il faut rassembler les fichiers sources C dans un répertoire nommé en général ''src''. Nous avons donc la hiérarchie suivante :
 
<source lang=bash>
affichage/
src/
programme.c
fonction_affichage.c
fonction_affichage.h
</source>
 
==Fichiers de configuration==
Pour fonctionner, ''Autotools'' se sert de plusieurs fichiers qu'il va créer mais requiert trois fichiers de notre part dont deux sont plus importants :
* ''configure.ac'' servant à configurer ''autoconf''
* ''Makefile.am'' qui sera utiliserutilisé par ''automake''
* ''README''
 
===''configure.ac''===
Pour faciliter la rédaction de ce fichier, utilisons le programme ''autoscan'' qui va fournir un modèle.
Pour cela, il faut se placer dans le répertoire principal ''affichage'' :
Ligne 58 ⟶ 47 :
AC_PREREQ([2.65])
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
AC_CONFIG_SRCDIR([src/fonction_affichageprogramme.c])
AC_CONFIG_HEADERS([config.h])
 
Ligne 69 ⟶ 58 :
AC_OUTPUT
</source>
Il sera modifié et complété :
<source lang=Perl>
AC_PREREQ([2.65])
AC_INIT(affichage, 0.01, affichage@gnu.org) # remplir ici le nom du programme, version, courriel du développeur
AC_CONFIG_SRCDIR([src/programme.c])
AC_CONFIG_HEADERS([config.h])
 
# Checks for programs.
===''Makefile.am''===
AC_PROG_CC
Il y aura plusieurs fichiers de ce type. Le ''Makefile.am'' le plus important se trouvera dans le répertoire principal ''affichage/''. Dans la plupart des projets, il ne contient qu'une ou deux lignes : la liste des sous-répertoires qu'il faudra parcourir dans notre exemple le répertoire ''src''. Pour l'indiquer à [[w:Automake|Automake]], il faut renseigner la variable «SRC» dont c'est justement le rôle.
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT
[
Makefile # on reconstitue ici l'arborescence qui doit
src/Makefile # être parcourue
]
</source>
Une fois édité, on le renomme en ''configure.ac''.
Donc à ce stade, l'arborescence doit être :
<source lang=bash>
affichage/
configure.ac
src/
programme.c
</source>
 
===Makefile.am===
Il y aura plusieurs fichiers de ce type : autant de ''Makefile.am'' que de répertoire à parcourir, un dans le répertoire principal ''affichage/'' et un dans ''src/''. Dans la plupart des projets, il ne contient qu'une ou deux lignes : la liste des sous-répertoires qu'il faudra parcourir dans notre exemple le répertoire ''src''. Pour l'indiquer à [[w:Automake|Automake]], il faut renseigner la variable «SRC» dont c'est justement le rôle.
 
On ajoute un ''Makefile.am'' :
<source lang=bash>
affichage/
configure.ac
Makefile.am
src/
programme.c
</source>
 
Dans lequel on place ce contenu :
Voici donc le contenu de ''Makefile.am''
<source lang=Perl>
SRC=src
</source>
 
Et on en crée un deuxième :
À chaque fois qu'un répertoire sera ajouté, [[w:Automake | Automake]] devra trouver un ''Makefile.am'' dedans. Ainsi, dans cet exemple, comme le répertoire ''src'' vient d'être ajouté, ''Automake'' devra trouver un ''Makefile.am'' dans ''src''.
 
<source lang=bash>
===''README''===
affichage/
configure.ac
Makefile.am
src/
Makefile.am
programme.c
</source>
 
Dans lequel on va écrire :
<source lang=Perl>
bin_PROGRAMS=affichage
affichage_SOURCE=programme.c
</source>
 
===README===
Sa rédaction ne pose aucun problème car son contenu n'est pas lu par ''Automake''. Seule sa présence est requise.
Il est cependant toujours conseillé de renseigner ces fichiers :
Ligne 86 ⟶ 126 :
* l'utilisateur est toujours heureux de pouvoir trouver une aide en cas de problème
 
PourToujours respecterpour unedes certaineraisons de unitécohérences entre les programmes, il est conseillé d'autre part de s'inspirer d'un ''README'' existant pour respecter ses conventions typographiques et se laisser guider par les infos qu'il est bon de placer ou pas de placer dans ce fichier.
 
===autogen.sh===
Ce script (disponible [http://freecode.com/projects/buildconf ici]) va nous permettre de simplifier la construction, car il réalise toutes les opérations nécessaires de manière automatique.
Même si tout est automatique, il faut quand même savoir que ce script lance plusieurs commandes différentes dont :
<source lang=bash>
$ aclocal
$ autoconf
$ autoheader
$ automake
</source>
 
Il faut noter qu'après ce lancement certains fichiers seront créés dont INSTALL, AUTHORS (vide : à compléter), ChangeLog (vide aussi), NOTES (vide), TODO (vide). Encore une fois, maintenir ces fichiers n'est pas difficile et toujours profitable aux utilisateurs.
 
<source lang=bash>
affichage/
autogen.sh
configure.ac
Makefile.am
README
src/
Makefile.am
programme.c
</source>
Maintenant que tout est prêt, lançons le script :
<source lang=bash>
$ ./autogen.sh
</source>
 
===LICENSE===
Enfin, il faut penser aussi utiliser la bonne licence légale à ajouter au logiciel. Par défaut, GNU Gpl. Nous la garderons, mais il faut faire une petite modification : ajouter le nom du programme et la date.
 
[[Catégorie:Autotools en C (livre)|*]]