Télécharger la présentation
La présentation est en train de télécharger. S'il vous plaît, attendez
1
Outils de développements
MAKE 17-21 Octobre 2005 Formation Continue- CNRS Laurence Viry
2
Quelques Définitions make: commande permettant d’automatiser la reconstruction d’un exécutable composé d’un ou plusieurs: Modules objets Librairies Fichiers entêtes … Cible: exécutable à (re)construire Dépendances: élément(s) dont dépend l’exécutable Règles: commande(s) permettant de reconstruire la cible Fichier make: fichier contenant la définition des dépendances et des règles de reconstruction des cibles 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
3
Un exemple Le programme « calcul » se décompose en 4 fichiers:
input.c : fonctions de lecture des fichiers de données matrix.c : fonctions de calcul matriciel graph.c : fonction d’affichage graphique main.c programme principal input.h,matrix.h,graph.h: fichiers d’entêtes 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
4
Le premier Makefile Le fichier Makefile sert à définir les cibles , les dépendances et les commandes pour reconstruire les cibles calcul: main.o input.o matrix.o graph.o cc –o calcul calcul.o input.o matrix.o graph.o –lm main.o: main.c input.h matrix.h graph.h cc –c main.c input.o: input.c input.h cc –c input .c matrix.o: matrix.c matrix.h cc –c matrix.c graph.o: graph.c graph.h matrix.h cc –c graph.c 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
5
Eléments d’un Makefile
Commentaires introduits par # Règles explicites: comment refaire plusieurs fichiers Cibles + dépendances : fichier à construire Commandes pour produire la cible Règles implicites: règles génériques Variables pour définir des listes de fichiers ou des options dans les commandes Directives Les règles explicites décrivent qunad et comment refaire un ou plusieurs fichiers appelés les cibles de la règle. Chaque règle explicite est composée de deux parties, la parties qui décrit les fichiers dont dépendent les cibles (dépendances) et les commandes à exécuter pour reconsrruire les cibles. Les règles implicites décrivent de manière générique quand et comment refaire des fichiers sur la base de leur nom. Elles permettent d’éviter de reécrire plusieurs fois la mêle règle explicite. Les variables associées à une chaîne de caractères. La référence à ces variables est remplacée par leur valeur pendant l’évaluation du makefile. Les directives permet d’indiauer à la commande make les fichiers à inclure ou les parties du makefile dont make doit tenir compte. 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
6
Les règles de reconstruction d’une cible
CIBLE(s):DEPENDANCES <tab>COMMANDE(s) Cibles et dépendances se trouvent sur la même ligne Le caractère « \ » peut forcer make à ignorer le retour à la ligne Les commandes commencent toujours par une tabulation et doit tenir sur une seule ligne avec éventuellement un \ La liste de commandes se terminent par une ligne sans tab Un mot commençant par le caractère $ est utilisé pour désigner le contenu d’une variable Attention, comme les espaces et les commentaires sont ignorés avant un commentaire, une ligne de commentaire termine une liste de commandes Dans une règle explicite, les cibles, les dépendances et les commandes n’utilisent que les noms explicites de fichier alors que dans les règles implicites, le caractère % est utilisé pour désigner de manière générique un ensemble de fichiers Avant d’exécuter les commandes d’une cible, le make vérifie si les fichiers dans les dépendances apparaissent comme cible dans une autre règle. Si c’est le cas, make applique cette nouvelle règle et ainsi de suite de façon récursive jusqu’à trouver des dépendances qui n’apparaissent dans aucune cible. Si tous les fichiers dépendants ont plus anciens que la cible, la cible est à jour Les mêmes règles s’appliquent pour les règles implicites Les règles explicites sont toujours prioritaires par rapport aux règles implicites. S’il existe une règle explicite pour décrire les dépendances et pour construire une cible, les règles implicites qui pourraient correspondre à la même cible sont ignorées. 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
7
Commandes make n’affiche pas une commande qui commence par @
Chaque ligne de commande est exécutée par un interpréteur différent du shell (sous Unix /bin/sh) Mettre plusieurs commandes sur une même ligne ou séparées par \ pour utiliser le même interpréteur make abandonne l’exécution d’une règle et de tout le processus en cas d’erreur Indiquer « - » en début de commande pour indiquer à make qu’il ignore l’échec de cette commande Interruption d’un make en cours d’exécution d’une règle, la cible est détruite par défaut. 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
8
Commandes: exemples dir/prog: a.o b.o cd dir cc –o prog ../a.o ../b.o
C’est incorrect dir/prog: a.o b.o cd dir ;\ cc –o prog ../a.o ../b.o clean : -rm *.o @echo ‘done’ .PRECIOUS indique les cibles qui ne seront pas détruites en cas d’interruption du make 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
9
Utilisation des variables
Utiliser pour décrire des listes de fichiers, de programmes, d’options de commandes Nom : séquence de caractères sauf :,#=», <tab>,espace Référence $(nom de la variable) OBJECTS= a.o b.o c.o prog:$(OBJECTS) cc –o prog $(OBJECTS) $(OBJECTS) : common.h Il existe des variables automatiques définies par make make $OBJECTS= : change la valeur de la variable OBJECTS 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
10
Variables automatiques
: nom de la cible de la règle $< : nom de la première dépendance $? : nom de toutes les dépendances qui sont plus récentes que la cible $^ : nom de toutes les dépendances d’une cible $* : radical associé à une règle implicite. Si la cible est toto.o désignée par %.o, alors $* est toto 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
11
Règles implicites Deux types de règles implicites Définition
Les règles incorporées à make mais qui dépendent de la version de make Règles implicites définies par l’utilisateur Définition Utilisation du caractère % %.o:%.c $(CC) –c $(CCFLAGS) $< Utilisation des suffixes .SUFFIXES: .o .f # début de makefile … .f.o: $(F77) –c $(F77FLAFS) $(DEBUG) $(OPTLEVEL) $*.f 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
12
Règles implicites: exemples
Construction d’un module objet (.o) à partir d’un fichier source (.c) %.o: %. c $(CC) –c $(CCFLAGS) $(CPPFLAGS) $< Édition de liens %: %.o $(LIB) $(CC) –o $(LDFLAGS) $< $(LIBS) 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
13
Construire une bibliothèque
Désigner un élément de la bibliothèque dans les cibles et les dépendances libbib.a(add.o) Règles implicites pour bibliothèques $% : nom du fichier objet dans une bibliothèque Si la cible est libbib.a(add.o), $% est add.o : si la cible est un élément de bibliothèque, est la bibliothèque Si la cible est libbib.a(add.o), est libbib.a Exemple: $(BIB) : $(ELTS) $(RANLIB) 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
14
Cibles standard all:première règle explicite pour définir ce qui est fait par défaut install : installation du programme construit uninstall: défait ce que install a fait Clean: supprime du répertoire courant tous les fichiers construits par make all Distclean: remet les répertoires sources dans leur état initial Une seule cible par répertoire facilite l’écriture et la maintenance de logiciels 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
15
Substitutions de variables
$(VARIABLE:OLD=NEW) Exemple1: SRC=toto.c OBJ=$(SRC:.c=.o) =>OBJ= toto.o Exemple2 SRCS=toto.c titi.c OBJS=$(SRCS:%.c=%.o) =>OBJS= toto.o titi.o Exemple3 BIB=bib.a SRCS=a.f b.f c.f ELTS=$(SRCS:%.c=$(BIB)(%.o)) == > ELTS = bib.a(a.o) bib.a(b.o) bib.a(c.o) 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
16
Appel récursif de make SUBDIRS= a b c d all : @for i in $(SUBDIRS) ;\
do;\ (cd $$i;\ echo “Faire tout dans $$i“;\ $(MAKE) all \ ) || exit 2;\ done @: pour supprimer l’affichage \ : maintenir la commande SHELL sur la même ligne $$ : insérer le $ dans la ligne du SHELL ; : séparer les instructions dans un même SHELL exit : force une erreur dans le shell 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
17
Production automatique de dépendances
make devient inutile si les dépendances ne sont pas à jour En C /C++: Gestion des dépendances entre les classes, les fichiers entêtes,les objets… makedepend En Fortran90: Gestion des dépendances entre modules , objets et fichiers entêtes n’est pas simple Des outils disponibles: sfmakedepend : recherche récursive … Voir 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
18
Appel du make make utilise par défaut le fichier Makefile ou makefile
make –f <fich> permet de spécifier un fichier make hérite des variables d’environnement L’option –k impose à make de continuer lorsqu’il rencontre une erreur L’option –s supprime les affichages L’option –n supprime l’exécution et affiche les commandes 17-21 Octobre 2005 Formation Continue – CNRS Laurence Viry
Présentations similaires
© 2024 SlidePlayer.fr Inc.
All rights reserved.