Vous êtes sur la page 1sur 2

L3 informatique, TD1 langage C

L’utilitaire make

8 septembre 2020

Objet du TD utilitaire make, compilation séparée

1 Principe de l’utilitaire Make


L’utilitaire make fonctionne à partir d’un fichier de configuration qui contient un ensemble de règles. Le
format de base d’une règle est le suivant :

cible : [dependances]
[commandes]
...

Le nom cible est suivi par un deux points et puis par une liste de dépendances s’il y en a. Les lignes
suivantes, contenant les commandes, commencent par une tabulation.

1.1 Traitement des dépendances


Le programme make est guidé par le contenu du fichier de règles, selon les principes suivants :
1. La première cible du fichier est la racine de l’arbre de dépendances.
2. Le traitement d’une cible a lieu après le traitement de toutes ses dépendances de gauche à droite.
3. La règle associée à une cible est exécutée si une de ses dépendances (fichier ou cible d’une autre
règle) a été modifiée plus récemment que la cible.
4. La règle associée à une cible avec ou sans dépendances est exécutée s’il n’existe pas de fichier dont
le nom est identique à celui de la cible.
5. La règle associée à une cible sans dépendances n’est pas exécutée si il existe un fichier dont le
nom est identique à celui de la cible.

1.2 Exercice
Soit le fichier de règles suivant :
msg : a b
c a t a b > msg
b:
echo ” S i g n a t u r e ” > b
a : a1 a2 a3
c a t a1 a2 a3 > a
a3 :
echo ” Fin a1 + a2 ” > a3
c:
echo ” j e s u i s i n v i s i b l e ”

On suppose que le répertoire contient les fichiers a a1 a2 b et regles, et que toutes les dépendances
sont à jour. La commande touch met à jour la date d’un fichier si il existe ou le crée si il n’existe pas.

1
Questions

Quelles sont les commandes déclenchées si on effectue les commandes suivantes :


— touch a1; make -f regles
— touch a1; touch a2; make -f regles
— touch a; make -f regles
— touch msg; make -f regles
— make -f regles

2 Make et la compilation séparée


On considère un programme prog écrit en langage C, dont le code source est divisé en 3 fichiers : fonc.c,
main.c et fonc.h.
Le code de main.c appelle des fonctions définies dans fonc.c. Le fichier fonc.h est inclus, par l’in-
termédiaire de directives #include, dans fonc.c et main.c.

Questions
1. Si fonc.c contient deux fonctions ”publiques”, int fct1(int a) et void fct2(int b) et une
variable externe publique, double pi, quel doit être le contenu du fichier fonc.h ?
2. Écrire un fichier de règles permettant d’automatiser la compilation du programme prog à l’aide
de la commande make.
3. Y ajouter une cible clean permettant d’effacer les fichiers objets et l’exécutable. Comment ”déclencher”
le nettoyage ?

3 Cibles manquantes
Soit le fichier de règles ci-dessous :
o b l i g e : FORCE
touch o b l i g e

FORCE:

Question
— Que se passe-t-il si on appelle make plusieurs fois avec le fichier de règles donné ci-dessus ?

4 Fichier de règles génériques


Il est possible d’écrire des fichiers de règles ”génériques” pour make. Ces fichiers sont adaptables facile-
ment à plusieurs projets de développement logiciel. En voici ci-dessous un exemple simple. Essayez d’en
comprendre le fonctionnement.
SRC=a . c b . c c . c
OBJ=$ (SRC : . c =.o )

prog : $ (OBJ)
g c c −o prog $ (OBJ)

%.o : %. c
g c c −c $< −o $@

Vous aimerez peut-être aussi