Test 10 - Gestion des cibles .PHONY
Ce test vérifie que bake et make gèrent correctement les cibles .PHONY, qui ne correspondent pas à des fichiers mais à des commandes spécifiques comme clean.
Sommaire
- Structure du test
- Contenu des fichiers de règles
- Objectif du test
- Comment exécuter le test
- Résultats attendus
Structure du test
test-10-phony/
├── README.md # Ce fichier
├── bake/
│ ├── Bakefile # Fichier de règles pour bake
│ ├── bakefile.jar # Exécutable de bake (JAR)
│ ├── main.c # Fichier source principal
│ ├── module.c # Fichier source du module
│ ├── module.h # Fichier d'en-tête
└── make/
├── Makefile # Fichier de règles pour make
├── main.c # Fichier source principal
├── module.c # Fichier source du module
└── module.h # Fichier d'en-tête
Contenu des fichiers de règles
Les fichiers Makefile et Bakefile contiennent les règles suivantes, incluant une cible .PHONY pour clean :
.PHONY: clean
all: program
program: main.o module.o
gcc -o program main.o module.o
main.o: main.c
gcc -c main.c -o main.o
module.o: module.c
gcc -c module.c -o module.o
clean:
rm -f program main.o module.o
echo "Clean executed!"
Objectif du test
Ce test vérifie que bake et make gèrent correctement les cibles .PHONY :
- La cible
cleandoit toujours s'exécuter même si les fichiers à supprimer n'existent pas. - La compilation doit fonctionner normalement et générer l'exécutable
program. - Comparer les messages de sortie pour s'assurer que
bakeetmakegèrent.PHONYde la même manière.
Comment exécuter le test
Test manuel
-
Compilez avec Make :
cd make make -
Exécutez la cible
clean:make cleanVous devez voir
Clean executed!affiché. -
Faites la même procédure avec Bake :
cd bake java -cp bakefile.jar fr.monlouyan.bakefile.Main clean -
Comparez les résultats et les messages affichés.
Résultats attendus
make cleanetbake cleandoivent exécuter la commande de nettoyage sans erreur.Clean executed!doit s'afficher après l'exécution de la cibleclean.make alletbake alldoivent compiler correctement le programme.- Si
bakene gère pas correctement.PHONY, la ciblecleanpourrait ne pas s'exécuter ou ne pas fonctionner correctement.