# Test 26 - Règle imbriquée dans une autre règle Ce test vérifie comment `bake` et `make` gèrent les règles imbriquées (c'est-à-dire lorsqu'une règle dépend d'une autre qui est également une règle). ## 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) - [Scénario de test](#scénario-de-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-26-rule-in-rule/ ├── README.md # Ce fichier ├── bake/ │ ├── Bakefile # Fichier de règles pour bake │ ├── bakefile.jar # Exécutable de bake (JAR) │ ├── Main.java # Fichier source │ ├── Main.class # Fichier compilé ├── make/ │ ├── Makefile # Fichier de règles pour make │ ├── Main.java # Fichier source │ ├── Main.class # Fichier compilé ``` ## Contenu des fichiers de règles Les fichiers `Makefile` et `Bakefile` contiennent la règle suivante : ```makefile Main.class: Main.java javac Main.java -Xlint:unchecked ``` ## Objectif du test Ce test a pour but de vérifier que `bake` et `make` : 1. Gèrent correctement les dépendances entre règles. 2. Recompilent `Main.class` seulement si `Main.java` a été modifié. 3. Ne recompileront pas `Main.class` si `Main.java` n’a pas été modifié. ## Scénario de test 1. Compiler `Main.java` pour générer `Main.class`. 2. Exécuter `make` et `bake` sans modifications pour voir si une recompilation est déclenchée. 3. Modifier `Main.java` et relancer `make` et `bake` pour voir si une recompilation est bien déclenchée. ## Comment exécuter le test ### Test manuel 1. Compiler avec Make : ```bash cd make make ``` Le fichier `Main.class` doit être généré. 2. Compiler avec Bake : ```bash cd bake java -cp bakefile.jar fr.monlouyan.bakefile.Main ``` 3. Vérifier si `Main.class` est bien généré. 4. Modifier `Main.java` et relancer la compilation : ```bash echo "// Modification" >> Main.java make ``` 5. Vérifier si `make` et `bake` détectent la modification et recompilent `Main.class`. ## Résultats attendus - `bake` et `make` doivent compiler `Main.java` en `Main.class` si `Main.class` n'existe pas ou si `Main.java` a été modifié. - Si `Main.java` n’a pas été modifié, `make` et `bake` ne doivent pas recompiler `Main.class`.