L'outil Make - Introduction
Enseignement - LAL
Présentation :
make permet de gérer :
- la maintenance
- la mise à jour
- la régénération
- l'installation
d'un ensemble de fichiers interdépendants en testant leurs dates de dernières modifications respectives.
Son utilisation se fait en deux étapes :
- dans un fichier généralement nommé Makefile ou makefile on décrit :
- les dépendances entre les différents fichiers;
- les règles de production,
ou comment mettre à jour, comment reconstruire;
- après toute modification de l'un des fichiers source, il suffit de taper make;
Alors make :
- examine les dépendances;
- trouve les fichiers qui ne sont pas à jour;
- exécute les seules commandes nécessaires.
Un fichier de configuration pour make peut contenir essentiellement 3 types de lignes :
- les dépendances
- les lignes de commandes
- les macros
On appelle règle une dépendance et les lignes de commandes associées.
Attention : il ne faut surtout pas considérer un fichier de configuration Makefile comme un programme.
En particulier, il n'y a pas de "déroulement séquentiel", du début à la fin du fichier.
Elles sont donc composées :
- d'une règle de dépendances;
- celle-ci s'exprime par une liste non vide de cibles à reconstruire, séparées par des blancs,
- suivie de ":" ou "::",
- suivi de la liste, éventuellement vide, des dépendances;
- d'une règle de production;
- elle s'exprime par une tabulation, suivie de commandes du shell à exécuter pour mettre à jour la cible.
Exemple :
(les caractères d'une ligne suivant un # sont ignorés de make)
# Prog.exe est généré à partir de fichiers objets
prog.exe : prog.o test.o
cc -o prog.exe prog.o test.o
# ^^^ Cet espace doit être une TABulation;
# la ligne précédente est une instruction
# pour linker les fichiers objects.
Dans l'exemple ci-dessus, prog.exe est la cible; c'est sa date de dernière modification qui est comparée à celles des dépendances, prog.o et test.o. La règle de production, précédée d'une tabulation, est la commande de link cc -o prog.exe prog.o test.o.
Il est possible de définir des règles sans dépendances; ce sont des règles dont les commandes sont toujours exécutées; exemple :
# pour effacer des fichiers devenus inutiles ...
clean :
rm -f *.o core *~
qu'on appliquera en tapant :
unix> make clean
- Ce sont des lignes de la forme : string1 = string2
- Elles peuvent être définies n'importe où dans le Makefile
- Toute apparition de $(string1) sera remplacée par string2
- La définition d'une macro peut faire référence à une autre macro
- Les variables d'environnements s'utilisent dans le Makefile comme des macros
Il existe un certain nombre de macros prédéfinies et largement utilisées; voici les principales :
- dans les règle de dépendances et de production :
- $? : contient la liste des noms de fichiers dépendants plus récents que la cible;
- $@ : contient le nom du fichier dépendant sans son suffixe éventuel;
- dans les règle de production seulement :
- $* : contient le nom du fichier dépendant sans son suffixe éventuel;
- $< : contient le nom du fichier de la liste de dépendance en cours de traitement (fichier source);
LPR = lpr -Ppegase
FILES = preface chap1 chap2 chap3 appendix
#
print : $(FILES)
$(LPR) $?
touch print
#
printall :
$(LPR) $(FILES)
Point d'entrée make dans le manuel en ligne.
Last modified: Mon Apr 14 11:37:48 CEST 2003
by LAL enseignement <ens@lal.in2p3.fr>