next up previous contents index
Next: La programmation en C++ Up: Créer des bibliothèques C Previous: Créer des bibliothèques C

   
Compiler à partir de deux fichiers sources en utilisant des bibliothèques personnelles

La synthèse des section précédentes est contenue dans le fichier salaire.c, acronyme de salut et de aire, les programmes vus avant :

/*
 * salut.c - Exemple d'utilisation de bibliotheques personneles.
 * La bibliotheque utilisee ici est "libmat.h" et les fonctions 
 * appelees sont "moi" et "mathieu". De plus, une fonction est definie
 * dans ce fichier source ("min"). Enfin, ce fichier source en C 
 * appelle une fonctiondefinie dans un autre fichier source, "cercle.c".
 * Le tout donne l'executable salaire (SALut+AIRE).
 *
 */

#include <stdio.h>
#include <string.h>
#include <libmat.h>
#include <stdlib.h>

/* fonction "aire_du_cercle" definie dans un autre fichier source
 * (ici cercle.c). */

double aire_du_cercle (double r);

main (int argc, char **argv)
{
  int i;
  double rayon, aire;
  printf ("\n");
  if (argc < 2)
    {
      printf ("Syntaxe incorrecte, essayez %s -h pour avoir l'aide\n",
                                                          argv[0]);
      printf ("\n");
      printf ("*********************************\n");
      printf ("Usage : %s rayon\n", argv[0]);
      printf ("**********************************\n");
      exit (1);
    }


  printf ("*********************************************\n");
  printf ("bonjour  celui qui lira a\n");
  printf ("**********************************************\n");

  /* Appel des fonctions definies a la fin de "salut.c" */

  printf ("min 3, 5 : %d\n", min (3, 5));
  printf ("min 8, 5 : %d\n", min (8, 5));

  /* Appel des fonctions definies dans "libmat.h" */

  moi (1, 1);
  mathieu (22);

  /* Appel de la fonction definie dans le fichier  "cercle.c" */

  rayon = atof (argv[1]);

  aire = aire_du_cercle (rayon);
  printf ("Aire du cercle de rayon %f = %f\n", rayon, aire);

  /* Traitement des arguments passes au programme. */

  for (i = 0; i < argc; i++)
    printf ("argc %d argv[%d] %s \n", argc, i, argv[i]);

  for (i = 0; i < argc; i++)
    {
      if ((strcmp ("-h", argv[i]) == 0) || (strcmp ("--help",
                                                  argv[i]) == 0))
	{
	  printf ("aide demandee...\n");

	  printf ("  -h, --help         affiche l'aide\n");
	  printf ("  -t                 affiche un message\n");
	}
      if ((strcmp ("-t", argv[i]) == 0))
	{
	  printf ("Message...\n");
	}
    }
  printf ("\n");		/* for i */
}

/* Definition d'une fonction juste pour tester */

int
min (int a, int b)
{
  if (a < b)
    return a;
  else
    return b;
}

Pour compiler un tel programme, il faut entrer les commandes suivantes :

gcc -c -I ../include salaire.c
gcc -c cercle.c
gcc  -L ../lib salaire.o cercle.o -o salaire -lmat

C'est un peu compliqué, et surtout long à taper, d'autant qu'on peut compiler des fichiers qui n'ont pas été modifiés (si seul le fichier cercle.c est modifié, ce n'est pas la peine de re-compiler le fichier salaire.c). Les makefiles vont nous aider pour nous simplifier la vie.



MATHIEU DECORE
1999-11-03
Merci de me dire ce que pensez de ce document.