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 commandegcc
. - 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é dex
. Pour cela il vous faudra inclure dansbar.c
le fichier<math.h>
, et lors de l’édition de lien inclure la bibliothèquelibm.a
à l’aide de l’option-lm
. - Ecrivez un fichier
Makefile
permettant de gérer la compilation defoobar
. - Faire en sorte que votre fichier
Makefile
utilise les variables standards deMakefile
(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
etbar.o
dans une même bibliothèquelibfb.a
(commandear
) qui sera utilisée par l’exécutablefoobar
. Modifiez votre fichierMakefile
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 desolve
. - Modifiez ce fichier
Makefile
pour qu’il puisse également générerconvert
. - 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 demake
pour simplifier votreMakefile
. - 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.