92 lines
2.7 KiB
Markdown
92 lines
2.7 KiB
Markdown
# 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](#structure-du-test)
|
|
- [Contenu des fichiers de règles](#contenu-des-fichiers-de-règles)
|
|
- [Objectif du test](#objectif-du-test)
|
|
- [Comment exécuter le test](#comment-exécuter-le-test)
|
|
- [Test manuel](#test-manuel)
|
|
- [Résultats attendus](#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` :
|
|
|
|
```makefile
|
|
.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` :
|
|
1. La cible `clean` doit toujours s'exécuter même si les fichiers à supprimer n'existent pas.
|
|
2. La compilation doit fonctionner normalement et générer l'exécutable `program`.
|
|
3. Comparer les messages de sortie pour s'assurer que `bake` et `make` gèrent `.PHONY` de la même manière.
|
|
|
|
## Comment exécuter le test
|
|
|
|
### Test manuel
|
|
|
|
1. Compilez avec Make :
|
|
```bash
|
|
cd make
|
|
make
|
|
```
|
|
|
|
2. Exécutez la cible `clean` :
|
|
```bash
|
|
make clean
|
|
```
|
|
Vous devez voir `Clean executed!` affiché.
|
|
|
|
3. Faites la même procédure avec Bake :
|
|
```bash
|
|
cd bake
|
|
java -cp bakefile.jar fr.monlouyan.bakefile.Main clean
|
|
```
|
|
|
|
4. Comparez les résultats et les messages affichés.
|
|
|
|
## Résultats attendus
|
|
|
|
- `make clean` et `bake clean` doivent exécuter la commande de nettoyage sans erreur.
|
|
- `Clean executed!` doit s'afficher après l'exécution de la cible `clean`.
|
|
- `make all` et `bake all` doivent compiler correctement le programme.
|
|
- Si `bake` ne gère pas correctement `.PHONY`, la cible `clean` pourrait ne pas s'exécuter ou ne pas fonctionner correctement.
|