# 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 └── 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 : ```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.