Makefiles
Automatisez la compilation
Makefiles est une leçon C Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C Academy comprend 4 leçons au total.
Pourquoi utiliser des Makefiles
Saisir manuellement les commandes gcc devient rapidement ingérable. make lit un Makefile qui décrit comment compiler votre projet et n’exécute que les commandes nécessaires.
Sa fonctionnalité phare : il ne recompile un fichier que lorsque ses entrées sont plus récentes que sa sortie, ce qui permet d’économiser énormément de temps de compilation.
Anatomie d’une règle
Une règle comporte trois parties : une cible, ses prérequis et une recette.
La ligne de la recette DOIT commencer par un véritable caractère TAB, et non par des espaces. C’est l’erreur la plus fréquente dans un Makefile.
target: prerequisite1 prerequisite2
<TAB>command to build targetUn premier Makefile
Ce fichier compile app à partir de deux fichiers sources. Exécuter make sans argument compile la première cible.
Si aucun des deux fichiers sources n’a changé depuis la dernière compilation, make affiche « up to date » et ne fait rien.
app: main.c math_utils.c
gcc main.c math_utils.c -o appRègles de compilation séparée
Compiler chaque fichier objet séparément signifie qu’une modification dans un fichier ne recompile que ce fichier.
make suit le graphe des dépendances : si vous modifiez main.c, seuls main.o et l’édition de liens finale sont relancés.
app: main.o math_utils.o
gcc main.o math_utils.o -o app
main.o: main.c math_utils.h
gcc -c main.c
math_utils.o: math_utils.c math_utils.h
gcc -c math_utils.cVariables
Les variables évitent les répétitions. Définissez-les en haut du fichier et développez-les avec $(NAME).
Vous pouvez ainsi modifier le compilateur ou les options à un seul endroit.
CC = gcc
CFLAGS = -Wall -Wextra -g
app: main.o math_utils.o
$(CC) main.o math_utils.o -o appVariables automatiques
make fournit des abréviations utilisables dans les recettes :
$@— le nom de la cible$^— tous les prérequis$<— le premier prérequis
Elles permettent de garder des recettes courtes et correctes.
app: main.o math_utils.o
$(CC) $^ -o $@
main.o: main.c
$(CC) $(CFLAGS) -c $< -o $@Règles avec motifs
Une seule règle avec motif compile chaque fichier .c en son fichier .o, ce qui vous évite d’écrire une règle par fichier.
% correspond à n’importe quelle racine ; combiné avec $< et $@, il est entièrement générique.
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@Cibles factices
Les cibles comme clean ne produisent pas de fichier portant ce nom. Déclarez-les avec .PHONY afin que make les exécute toujours, même si un fichier nommé « clean » existe.
clean supprime les artefacts de compilation pour forcer une nouvelle compilation complète.
.PHONY: clean
clean:
rm -f *.o appUn Makefile complet
Assemblons le tout : des variables, une règle avec motif, une règle d’édition de liens et une cible factice clean.
Cette organisation s’adapte à de nombreux fichiers sans modification propre à chaque fichier.
CC = gcc
CFLAGS = -Wall -Wextra -g
OBJS = main.o math_utils.o
app: $(OBJS)
$(CC) $^ -o $@
%.o: %.c
$(CC) $(CFLAGS) -c $< -o $@
.PHONY: clean
clean:
rm -f $(OBJS) appComment make prend ses décisions
make compare les horodatages. Une cible est recompilée si l’un de ses prérequis possède une heure de modification plus récente, ou si la cible n’existe pas.
C’est pourquoi il est important d’indiquer les dépendances envers les fichiers d’en-tête : modifiez un en-tête et chaque fichier objet qui en dépend est correctement recompilé.
Cibles multiples et cibles par défaut
La première cible d’un Makefile est la cible par défaut, exécutée lorsque vous saisissez simplement make. Par convention, elle s’appelle all.
Vous pouvez également compiler une cible précise en indiquant son nom, comme avec make clean ou make test, ce qui donne à un même Makefile plusieurs points d’entrée utiles.
.PHONY: all
all: app
test: app
./app --selftestVérification rapide
Diagnostiquez une erreur classique de Makefile.
Récapitulatif
Vous pouvez maintenant automatiser les compilations avec make :
- Les règles comprennent une cible, des prérequis et une recette indentée avec un TAB
- Les variables et les variables automatiques (
$@ $^ $<) réduisent les répétitions - Les règles avec motifs (
%.o: %.c) traitent tous les fichiers de manière générique .PHONYmarque les cibles qui ne sont pas des fichiers, commeclean- make ne recompile que ce qui n’est plus à jour, en se basant sur les horodatages
Ensuite : créer des bibliothèques statiques et partagées.
Questions Fréquemment Posées
La leçon « Makefiles » est-elle gratuite ?
Oui — le texte complet de « Makefiles » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C Academy, passe à CoddyKit PRO. Le cours C Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Makefiles » ?
Automatisez la compilation Tu pratiques C Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C Academy ?
Aucune expérience préalable n'est requise. C Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Makefiles » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C Academy ?
Oui. Chaque leçon C Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.