Faire un Makefile Générique

Note, il est conseillé de savoir faire un Makefile « standard » pour profiter pleinement de la lecture de cet article.
On peut bien sûr utiliser un truc complément inutile :
CFLAGS = -W -Wall -g
Ceci aura pour effet de configurer les CFLAGS, et de compiler tous les fichiers sources du répertoire courant.
En gros ça revient a faire ça :
gcc $CFLAGS *.c
Ce qui ne sert à rien, quand on sait qu'un Makefile sert, entre autres, à compiler séparément ses sources pour ne pas compiler tout à chaque fois.
Je tairai le nom de la personne qui a cru que ça allait me servir…
Sinon, on peut faire des Makefile très simples, avec le nom de chaque règle « en dur ». Ces Makefiles sont en général ceux utilisés pour des petits programmes, dès que le nombre de fichiers sources augmente, il devient très difficile d'écrire toutes les règles à la main.
Pour résoudre ce problème, on peut utiliser des règles génériques qui vont permettre de s'affranchir du nom de chaque règle et de ses dépendances.
CC = gcc CFLAGS = -W -Wall -g LDFLAGS = SRC = $(wildcard *.c) OBJS = $(SRC:.c=.o) AOUT = prog all : $(AOUT) prog : $(OBJS) $(CC) $(LDFLAGS) -o $@ $^ %.o : %.c $(CC) $(CFLAGS) -o $@ -c $< clean : @rm *.o cleaner : clean @rm $(AOUT)
Quelques explications :
SRC = $(wildcard *.c) : comme son nom l'indique, wildcard agit comme une wildcard, c'est à dire un caractère « joker ». Ici on s'en sert pour récupérer tous les fichiers finissant par .c du répétoire dans lequel est le Makefile.
OBJS = $(SRC:.c=.o) : permet de préciser les nom de chaque fichier .o à partir du fichier .c.
$@ : le nom de la cible
$^ : le nom de chaque dépendance
$developpez.com