83 lines
2.5 KiB
Markdown
83 lines
2.5 KiB
Markdown
|
# 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`.
|