La commande make
permet de contrôler le compilateur lorsqu'un programme composé de plusieurs fichiers doit être compilé. Dans ce cas, make
détecte les fichiers qui ont déjà été compilés et ne recompile que les fichiers modifiés depuis la dernière compilation.
make
s'utilise en définit un Makefile
qui contient l'ensemble des directives relatives à la compilation du programme. Considérons un programme C composé des fichiers a.c
et b.c
ainsi que le fichier def.h
comprenant les définitions de prototypes et les constantes. Ce programme peut se compiler avec la commande gcc-o prog a.c b.c def.h
. Une alternative est d'utiliser make
.
Un fichier Makefile
comprend des blocs composé d'une cible, une liste de dépendances et un ou des programmes à exécuter. La cible par défaut
all: prog
Ce premier bloc indique que pour construire la cible all, c'est-à-dire la cible par défaut utilisée lorsque make
est lancé sans argument, il faut en fait construire la cible progr.
prog: a.o b.o gcc -o prog a.o b.o
Ce second bloc indique que pour contruire le fichier prog
, il faut d'abord examiner les fichiers a.o
et b.o
. Si ceux-ci sont à jour, il suffira d'exécuter gcc -o progr a.o b.o
pour construire la cible prog
. Sinon, il faudra d'abord construire les cibles a.o
et b.o
.
a.o: a.c def.h gcc -c a.c
Ce bloc indique comment construire la cible a.o
qui dépend des fichiers a.c
et def.h
. Le paramètre -c
de gcc indique à gcc qu'il doit compiler a.c
mais ne doit pas utiliser de linker.
b.o: b.c def.h cc -c b.c
Idem pour la cible b.c
clean: rm a.o b.o
Ce bloc est utile pour mettre de l'ordre. Il suffira d'exécuter make clean
pour effacer les fichiers objets a.o
et b.o
qui seront devenus inutiles lorsque le programme prog
sera terminé.
tar: tar czvf prog.tar.gz a.c b.c def.h
Ce dernier bloc permet de construire une archive .tar.gz
reprenant l'ensemble des sources, utile lorsqu'il faut rendre un TP...
man make