87 lines
2.6 KiB
Markdown
87 lines
2.6 KiB
Markdown
|
# Test 24 - Chaîne de dépendances longues
|
||
|
|
||
|
Ce test vérifie la manière dont `bake` et `make` gèrent une longue série de dépendances en cascade, où chaque cible dépend de la précédente.
|
||
|
|
||
|
## 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-24-long-dependency-chain/
|
||
|
├── README.md # Ce fichier
|
||
|
├── bake/
|
||
|
│ ├── Bakefile # Fichier de règles pour bake
|
||
|
│ ├── bakefile.jar # Exécutable de bake (JAR)
|
||
|
└── make/
|
||
|
└── Makefile # Fichier de règles pour make
|
||
|
```
|
||
|
|
||
|
## Contenu des fichiers de règles
|
||
|
|
||
|
Les fichiers `Makefile` et `Bakefile` contiennent une longue chaîne de dépendances comme suit :
|
||
|
|
||
|
```makefile
|
||
|
all: target50
|
||
|
|
||
|
target50: target49
|
||
|
echo "Building target50"
|
||
|
|
||
|
target49: target48
|
||
|
echo "Building target49"
|
||
|
|
||
|
...
|
||
|
|
||
|
target2: target1
|
||
|
echo "Building target2"
|
||
|
|
||
|
target1:
|
||
|
echo "Building target1"
|
||
|
```
|
||
|
|
||
|
## Objectif du test
|
||
|
|
||
|
Ce test vérifie que `bake` et `make` :
|
||
|
1. Résolvent correctement une longue chaîne de dépendances.
|
||
|
2. Exécutent les cibles dans le bon ordre, en commençant par `target1` jusqu'à `target50`.
|
||
|
3. Ne rencontrent pas de limitations de profondeur de résolution des dépendances.
|
||
|
4. Comparent les messages de sortie pour s'assurer que `bake` et `make` ont le même comportement.
|
||
|
|
||
|
## Scénario de test
|
||
|
|
||
|
1. Exécuter `make` et `bake` sans fichiers préexistants pour observer la construction de toutes les cibles.
|
||
|
2. Réexécuter `make` et `bake` pour voir s'ils détectent que toutes les cibles sont déjà construites et n'ont pas besoin d'être reconstituées.
|
||
|
|
||
|
## Comment exécuter le test
|
||
|
|
||
|
### Test manuel
|
||
|
|
||
|
1. Exécutez la compilation avec Make :
|
||
|
```bash
|
||
|
cd make
|
||
|
make
|
||
|
```
|
||
|
Toutes les cibles de `target1` à `target50` doivent être construites dans l'ordre.
|
||
|
|
||
|
2. Faites la même procédure avec Bake :
|
||
|
```bash
|
||
|
cd bake
|
||
|
java -cp bakefile.jar fr.monlouyan.bakefile.Main
|
||
|
```
|
||
|
|
||
|
3. Réexécutez `make` et `bake` sans supprimer les fichiers pour voir s'ils détectent que tout est déjà construit.
|
||
|
|
||
|
4. Comparez les résultats et les messages affichés.
|
||
|
|
||
|
## Résultats attendus
|
||
|
|
||
|
- `bake` et `make` doivent exécuter les cibles dans le bon ordre.
|
||
|
- Une exécution répétée de `make` et `bake` ne doit rien reconstruire si rien n'a changé.
|
||
|
- Les messages de sortie doivent être identiques entre `bake` et `make`.
|