< Programmation

En programmation, make est, entre autres, un outil pour compiler de grandes applications. C'est un moteur de production principalement pour travailler dans un langage compilé sous environnement Unix.

En langage C, l'utilisation basique est :

make exo7

cela remplace :

cc exo7.c -o exo7

Son principal avantage et ce pourquoi il fut imaginé est de simplifier grandement le travail du programmeur. Lorsque l'on compile un programme utilisant de nombreuses bibliothèques comme pour l'utilisation d'interfaces graphiques par exemple :

gcc -o exo5 exo5.c -L/usr/X11R6/lib -lglut -lGLU -lGL -lX11 -lXmu -lXext -lXi -lm

On aura besoin de directives indiquant que l'on compilera avec cette longue ligne de bibliothèques, ces directives sont enregistrés dans un fichier texte toujours nommé Makefile.

La commande make et fichier ASCII Makefile (M majuscule) vont toujours de pair. Makefile se trouvant dans le répertoire ou l'on exécute make.

Structure du Makefile

# Les lignes de commentaires commencent par dièse
VARIABLE=valeur
 cible: dépendances
<TABULATION>commande 1
	    commande 2
             .
             .
             .
	    commande n

Exemple de Makefile

Un Makefile commun est :

 all: helloworld
 
 helloworld: helloworld.c
	cc -o helloworld helloworld.c
 clean:
	rm -f helloworld

En exécutant make en ligne de commande dans le répertoire où se trouve le Makefile nous avons :

$ ls
helloworld.c  Makefile
$ make
cc -o helloworld helloworld.c
$ ls
helloworld  helloworld.c  Makefile
$ make clean
rm -f helloworld
$ ls
helloworld.c  Makefile
$ make all
cc -o helloworld helloworld.c
$

Variables

Il est possible de définir des variables dans un makefile. Ces variables sont très souvent utilisées pour définir le compilateur utilisé, les options de compilation, les chemins vers les bibliothèques, et autres variables spécifiques à l'environnement de l'utilisateur. Par exemple, on utilisera:

TARGET=helloworld
CC=cc
CFLAGS=-O2 -g

$(TARGET): $(TARGET).c
  $(CC) $(CFLAGS) -o $(TARGET) $(TARGET).c

Il existe aussi des variables magiques comme :

$@ : le nom de la cible courante.
$< : le fichier source de la dépendance

Le précédent Makefile se simplifie en :

# Nom de l'exécutable
TARGET=helloworld

# Variables d'environnement
CC=cc
CFLAGS=-O2 -g
RM=rm -f

# Définition des règles de compilation
 all: $(TARGET)
 
 $(TARGET): $(TARGET).c
	$(CC) $(CFLAGS) -o $@ $<

 clean:
	$(RM) $(TARGET)

Voir aussi

Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.