# Test 09 - Gestion des commentaires dans le Makefile

Ce test vérifie que `bake` et `make` gèrent correctement les commentaires placés à différents endroits dans le fichier de règles. 
Les commentaires ne doivent pas perturber l'exécution du script de compilation.

## 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-09-commentaires/
├── 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 avec des commentaires placés à différents endroits :

```makefile
# Définition des variables
COMPILER = gcc  # On utilise gcc comme compilateur
CFLAGS = -Wall -Wextra  # Options de compilation
OUTPUT = program  # Nom de l'exécutable

# Liste des fichiers objets
OBJS = main.o module.o  # Chaque .o correspond à un fichier source

# Règle principale
$(OUTPUT): $(OBJS)  # L'exécutable dépend des fichiers objets
	$(COMPILER) $(CFLAGS) -o $(OUTPUT) $(OBJS)  # Compilation finale

# Compilation des fichiers objets
main.o: main.c  # Dépendance explicite
	$(COMPILER) $(CFLAGS) -c main.c -o main.o  # Compilation de main.c

module.o: module.c  # Autre dépendance
	$(COMPILER) $(CFLAGS) -c module.c -o module.o  # Compilation de module.c

# Nettoyage des fichiers générés
clean:  # Cible pour supprimer les fichiers de compilation
	rm -f $(OUTPUT) $(OBJS)  # Suppression des fichiers objets et de l'exécutable

# Fin du Bakefile
```

## Objectif du test

Ce test vérifie que `bake` et `make` interprètent correctement les commentaires sans affecter l'exécution du processus de compilation :
1. Vérifier que les commentaires sont ignorés et ne gênent pas l'exécution.
2. Confirmer que les fichiers sources sont bien compilés et l'exécutable est généré correctement.
3. Comparer les messages de sortie pour s'assurer que `bake` et `make` gèrent les commentaires de manière similaire.

## Comment exécuter le test

### Test manuel

1. Compilez avec Make : 
   ```bash
   cd make
   make
   ```

2. Exécutez l'exécutable :
   ```bash
   ./program
   ```

3. Faites la même procédure avec Bake : 
   ```bash
   cd bake
   java -cp bakefile.jar fr.monlouyan.bakefile.Main
   ```

4. Comparez les résultats et les messages affichés.

## Résultats attendus

- Les deux outils doivent ignorer les commentaires et exécuter les commandes normalement.
- L'exécutable `program` doit être généré sans erreur.
- Les messages de sortie doivent indiquer que `bake` et `make` ont bien interprété le fichier de règles.