TD01 : Compilation avec GCC et Makefile

Exercice 1 : mon premier Makefile

Le fichier foobar.zip contient les sources permettant de générer un executable foobar.

  • Consultez les sources et générez l’exécutable foobar à l’aide de la commande gcc.
  • Toujours à l’aide de la commande gcc, générez tous les fichiers objets (.o) puis l’exécutable à partir des .o.
  • Modifiez la fonction bar(double x) pour qu’elle retourne la racine carré de x. Pour cela il vous faudra inclure dans bar.c le fichier <math.h>, et lors de l’édition de lien inclure la bibliothèque libm.a à l’aide de l’option -lm.
  • Ecrivez un fichier Makefile permettant de gérer la compilation de foobar.
  • Faire en sorte que votre fichier Makefile utilise les variables standards de Makefile (CC, CFLAGS, LDFLAGS, LDLIBS, ...).
  • Mettre à jour votre Makefile pour qu'il utilise au mieux les règles implicites.
  • Maintenant nous allons regrouper les deux fichiers foo.o et bar.o dans une même bibliothèque libfb.a (commande ar) qui sera utilisée par l’exécutable foobar. Modifiez votre fichier Makefile en conséquence.

Exercice 2 : un Makefile pour TSP

Le fichier tsp.zip contient les sources permettant de générer 2 exécutables :

  • solve qui résout le problème du voyageur de commerce (dont les instances sont codées dans des fichiers d'extension .tsp)
  • convert qui permet de convertir des fichiers d’un format à un autre.

Ces deux exécutables utilisent les modules matrice2d, tsp et memoire ainsi que la bibliothèque mathématique (libm.a).

Voici un exemple d'utilisation du programe solve :

$ ./solve NN bays29.tsp

Repondez aux questions suivantes :

  • A l’aide de la commande gcc, générez tous les fichiers objets (.o).
  • Toujours à l’aide de la commande gcc, générez les 2 exécutables. N’oubliez pas la bibliothèque le -lm.
  • Vérifiez que solve se lance correctement.
  • Ecrivez un fichier Makefile permettant de gérer la compilation de solve.
  • Modifiez ce fichier Makefile pour qu’il puisse également générer convert.
  • Pensez à utiliser la cible ALL pour compiler vos deux exécutables.
  • Si vous ne l’avez pas encore fait, utilisez au mieux les variables standards (comme CC=gcc) et les règles implicites de make pour simplifier votre Makefile.
  • Créez une cible clean qui permet de nettoyer le répertoire courant.
  • Pensez à utiliser la cible spéciale .PHONY pour toutes les cibles qui ne sont pas des fichiers.
  • N'oubliez aucune dépendance, notamment pour les fichiers .h.
  • Soumettez cette version de votre fichier Makefile dans Moodle.

Quelques remarques concernant ce rendu :

  • Veillez à bien respecter le nom des exécutables à générer.
  • Bien vérifiez les dépendances à la compilation, notamment les fichiers .h.
  • Astuce : Vous pouvez utiliser la commande gcc -MM *.c pour demander à gcc de calculer automatiquement les dépendances de votre Makefile.
  • N'utilisez pas de bibliothèque intermédaire.