next up previous contents index
suivant: 5.3 Arguments sur la monter: 5. Programmation en C précédent: 5.1 Le compilateur C   Table des matières   Index


5.2 La commande make

Lorsque l'on développe un programme un peu plus important que l'exemple donné plus haut, il devient vite fastidieux d'utiliser directement la commande cc, avec les bonnes options et sans oublier de recompiler tous les fichiers que l'on a modifiés depuis la dernière mise à jour.

Supposons que l'on travaille sur un projet comportant deux fichiers sources, main.c et func.c, qui utilisent tous deux un fichier inc/incl.h placé dans un sous-répertoire. L'exécutable que l'on fabrique est nommé essai.

En utilisant cc, il faut faire :

  $ cc -c -Iinc -o main.o  main.c
  $ cc -c -Iinc -o func.o  func.c
  $ cc -o essai main.o func.o
L'option -c spécifie que l'on veut fabriquer un fichier objet (.o) qui sera lié ultérieurement pour obtenir un exécutable.

Si l'on modifie main.c, il faut refaire les étapes 1 et 3. Si l'on modifie le fichier inclut, il faut tout refaire. On dit que essai dépend de main.o et func.o, qui dépendent eux même de main.c, func.c et de incl.h.

Ceci signifie que notre exécutable final (essai) est à jour si sa date de modification est plus grande que celle de main.o et func.o, et ainsi de suite.

La commande make permet d'automatiser ce genre de chaînes de production. Son utilisation permet au développeur de s'assurer qu'un module donné est toujours à jour par rapport aux divers éléments dont il dépend. make se charge de déclencher les actions nécessaires pour reconstruire le module cible.

make [-f fichier-dep]

Voici un exemple de fichier Makefile traitant l'exemple précédent :

  all: essai

  essai: main.o func.o 
      cc -o essai func.o main.o

  CFLAGS= -Iinc

  func.o: inc/incl.h
  main.o: inc/incl.h
La première ligne (all) indique que la cible par défaut est essai : lorsque l'on actionne make sans arguments, on veut fabriquer essai.

Ensuite, on indique que essai dépend des deux fichiers objets, et qu'il se fabrique à partir d'eux en actionnant cc -o essai ....

CFLAGS est une variable spéciale indiquant les options à passer au compilateur C, ici -Iinc.

Enfin, on spécifie que les fichiers .o dépendent du fichier .h. Notons que make utilise un certain nombre de règles par défaut, par exemple celle disant que les fichiers .o dépendent des fichiers .c et se fabriquent en utilisant cc. Il n'est donc pas nécessaire de faire figurer la règle complète, qui s'écrirait :

  main.o: inc/incl.h main.c
      cc -Iinc -c -o main.o main.c


next up previous contents index
suivant: 5.3 Arguments sur la monter: 5. Programmation en C précédent: 5.1 Le compilateur C   Table des matières   Index
Emmanuel Viennet
1999-01-05