Autotools en C/Ajout d'une fonction

Un livre de Wikilivres.
Sauter à la navigation Sauter à la recherche

Nous partons du projet précédent. Voici une opération très courante lorsqu'on programme avec ces outils. Ajouter un fichier va vouloir dire : modifier le Makefile.am et créer les fichiers dans src/

Ajout d'une fonction[modifier | modifier le wikicode]

Ce titre signifie en fait, une fonction contenue dans un autre fichier que programme.c; par conséquent, notre projet s'enrichit d'un fichier...

/* fonction_affichage.c */
#include <stdio.h>

int affichage(char *phrase)
{
  fprintf(stdin, "%s", phrase);
  return 0;
}

... ou plutôt de deux. Il faut prendre l'habitude d'avoir les en-têtes dans un fichier séparé. Cela sera utile pour les tests par exemple et d'une manière générale c'est plus propre pour la réutilisation des fonctions.

/* entête fonction_affichage.h */
int affichage(char *phrase);

D'ailleurs pour être encore plus propre nous allons mettre ce qu'il faut pour empêcher les inclusions multiples.

/* entête fonction_affichage.h */
#ifndef FONCTION_AFFICHAGE_H
#define FONCTION_AFFICHAGE_H
int affichage(char *phrase);
#endif

Et le fichier principal modifié :

/* programme.c */
#include "fonction_affichage.h"

int main()
{
  affichage("Bonjour\n");
  return 0;
}

En résumé, nous avons deux nouveaux fichiers : fonction_affichage.c, fonction_affichage.h. En plus, nous avons modifié programme.c. Nous avons donc l'arborescence suivante :

affichage/
  src/
   programme.c
   fonction_affichage.c
   fonction_affichage.h

Il faut en informer le Makefile.am contenu dans src/

bin_PROGRAMS=affichage
affichage_SOURCE=programme.c fonction_affichage.c fonction_affichage.h

On peut relancer la compilation qui va mettre ces fichiers à jour :

$ make

Mémo[modifier | modifier le wikicode]

Il est courant d'oublier une étape voici un résumé quand on veut ajouter un fichier :

  1. créer le fichier.c
  2. créer le fichier.h
  3. ajouter ces fichiers dans le Makefile.am
  4. ajouter "fichier.h" au dessus de la fonction main dans le fichier principal du programme