2025-03-03 13:57:20 +01:00
# Test 07 - Dépendances multiples
Ce test vérifie que si un fichier `.c` dépend de plusieurs fichiers `.h` , toute modification d'un `.h` entraîne la recompilation du fichier `.c` concerné.
## 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-07-dependances/
├── 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
2025-03-10 13:21:31 +01:00
└── 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
2025-03-03 13:57:20 +01:00
```
## Contenu des fichiers de règles
Les fichiers `Makefile` et `Bakefile` contiennent les règles suivantes :
```makefile
CC = gcc
CFLAGS = -Wall -Wextra -Werror
# Règle par défaut
all: program
# Compilation de l'exécutable
program: main.o module.o
$(CC) $(CFLAGS) -o program main.o module.o
# Compilation des fichiers .c en .o
main.o: main.c module.h
$(CC) $(CFLAGS) -c main.c -o main.o
module.o: module.c module.h
$(CC) $(CFLAGS) -c module.c -o module.o
# Nettoyage des fichiers objets et de l'exécutable
clean:
rm -f main.o module.o program
# Nettoyage complet
mrproper: clean
# Force la recompilation
rebuild: clean all
```
## Objectif du test
Ce test vérifie que `bake` et `make` prennent en compte correctement les dépendances multiples :
1. Modifier le fichier `module.h` doit entraîner la recompilation de `main.o` et `module.o` .
2. Exécuter `make` ou `bake` sans modification ne doit rien recompiler.
3. Comparer les messages de sortie pour s'assurer que `bake` et `make` gèrent les dépendances de manière similaire.
## Comment exécuter le test
### Test manuel
1. Compilez avec Make :
```bash
cd make
make
```
2. Modifiez `module.h` :
```bash
echo "// Modification pour test" >> module.h
```
3. Recompilez avec Make :
```bash
make
```
4. Faites la même procédure avec Bake :
```bash
cd bake
java -cp bakefile.jar fr.monlouyan.bakefile.Main
```
5. Comparez les résultats et les messages affichés.
## Résultats attendus
- Les deux outils devraient détecter les modifications de `module.h` et recompiler `main.o` et `module.o` .
- Sans modification, `bake` et `make` ne doivent pas relancer la compilation.
- Les messages de sortie devraient indiquer clairement quelles parties du programme ont été recompilées.
- Si `bake` ne gère pas correctement les dépendances, il pourrait ne pas recompiler les fichiers nécessaires ou les recompiler inutilement.