Le sujet demandait de comprendre le fonctionnement d’un outil de build en réalisant une version simplifiée de GNU Make.
Projet en action ✦
Bake
Une copie pédagogique de GNU Make, refaite à la main en Java : Bake lit un Makefile, construit son graphe de dépendances, ordonne le build et détecte les cycles avant de compiler.
Le projet, derrière l’écran ✦
Le projet
sans détour.
Le sujet, le fonctionnement, le point difficile et les choix de code : tout ce qu’il faut pour comprendre le projet rapidement.
L’objectif était de ne pas traiter un Makefile comme une simple liste de commandes : il fallait comprendre les relations entre cibles, dépendances, dates de modification et ordre de compilation.
Le parcours principal est jouable ici. Le dépôt GitHub garde la version complète du projet et ses fichiers.
Bake lit un Bakefile, construit les règles, résout le graphe, vérifie les dépendances circulaires puis exécute les commandes nécessaires. Le dépôt comporte aussi une batterie de 32 scénarios de test : fichiers absents, variables, .PHONY, sous-répertoires, commentaires et cycles.
Faire coexister parsing, graphe de dépendances, timestamps et exécution sans laisser passer une dépendance circulaire.
Le code sépare le parsing, le moteur de build, la résolution des dépendances, l’exécution des commandes et la gestion des timestamps. Les diagrammes et le rapport accompagnent l’implémentation.
Démonstration ✦
Voir le projet
prendre vie.
Explorez les fonctionnalités, les interactions et le parcours principal du projet.
Le projet Java lancé depuis un faux terminal
Lance le programme Java pour observer Bake parcourir le graphe.
Bake part des sources, remonte les dépendances, puis ne reconstruit que ce qui doit l’être.
Bake est une copie pédagogique de GNU Make, refaite à la main en Java. Le projet lit un Bakefile, transforme ses cibles en graphe de dépendances, calcule l’ordre d’exécution et détecte les dépendances circulaires avant de lancer les commandes de compilation.
La démo montre le résultat. Le dépôt GitHub contient le code complet et les fichiers du projet.