GNU make


Table des matières

1 Préambule

L'essentiel de ce document est une synthèse du document en anglais que l'on peut trouver à l'adresse http://www.gnu.org/manual/make/html_mono/make.html sur le site officiel de GNU (http://www.gnu.org/).

Tous les makes ne sont pas des GNU make. Au département d'informatique de l'ULP, tous les PC ont seulement GNU make. Par contre, plusieurs makes sont installés sur le serveur ada :

  1. /usr/local/bin/make est un make GNU.
  2. /usr/ccs/bin/make est un make conçu par SUN.
Les extensions de fonctionnalités fournies par le GNU make sont nombreuses et souvent très importantes. C'est pourquoi nous ne nous contenterons pas de décrire les fonctionalités communes à tous les makes. De votre côté il vous faudra vérifier, à chaque fois que vous utiliserez un make, qu'il s'agit bien d'un GNU make.


2 L'objectif visé

L'objectif premier de l'outil make est de permettre de construire des fichiers, éventuellement à partir d'autres fichiers, par des commandes shell, et de manière automatique. Exemples :

Accessoirement, l'outil make peut servir à exécuter un grand nombre d'opérations, quasiment à la manière d'un shell script. On peut ainsi mettre au point une procédure pour faire le ménage (détruire les fichiers inutiles) dans toute une arborescence, par exemple sur tout un compte ou, pourquoi pas, sur toute une machine, simplement en tapant « make récursive_clean ».

Évidemment, l'outil make ne sait pas, à l'avance, distinguer les fichiers que vous considérez comme inutiles de ceux que vous voulez conserver. Il ne sait pas non plus quels fichiers il faut construire, à partir de quels autres fichiers, ni dans quelles conditions et avec quelles commandes il faut mettre à jour ces fichiers. C'est l'utilisateur qui doit indiquer tout cela en éditant un fichier qui contiendra toutes les informations nécessaires. Par exemple pour construire le fichier scanline à partir des informations contenues dans le fichier scanline.mk, il faut taper : « make scanline -f scanline.mk ». Il est également possible de taper simplement « make scanline » Mais alors les informations qui permettent de construire le fichier scanline doivent être contenues dans un fichier qui s'appelle Makefile (ou makefile). Ainsi la commande précédente sera l'exact équivalent de : « make scanline -f Makefile » Dans les sections suivantes, les fichiers contenant ces informations seront tous appelés des makefiles. Nous allons voir comment écrire un fichier de type makefile et comment l'utiliser.


3 Les règles

3.1 Les composantes d'une règle

Les makefiles sont, en grande partie, constitués d'une suite de règles. Une règle (rule en anglais) est constituée de :