CC = gcc
Options = -Wall
Headers = tp_struct.h bibli.h

# $@ nom de la cible
# $^liste des dépendances
# $< nom d ela 1ere dépendance
prog: tp_struct_alloc.o main1.o
	@echo "liste des dépendances :" $^
	$(CC) $(Options) $^ -o $@

#si j'écris juste echo bla, \
le makefile affiche echo bla puis bla\
ce n'est pas jojo !\
avec @echo, je lui demande d'exécuter echo\
sans afficher la commande !


%.o: %.c $(Headers)
	@echo "liste des dépendances :" $< $(Headers)
	$(CC) $(Options) -c $<

# sur ce que fait PHONY :  \
https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html \
PHONY : 2 raisons pour cela : \
éviter un conflit avec un fichier du même nom que la dépendance;\
améliorer les performances
.PHONY: clean mrproprer rebuild

#comme clean est déclaré en PHONY, il va s'exécuter\
même si un fichier clean existe et est déjà à jour !

clean:
	rm *.o 
# expérience à réaliser pour comprendre\
a) commenter .PHONY b) créer un fichier avec la commande\
touch clean
# dans ce cas, comme le fichier clean est à jour :\
la règle clean ne s'exécute pas et les fichiers .o demeurent en place
#Ainsi, avec .PHONY, je décide que clean s'exécute dans tous les cas !


mrpropre: clean
	rm prog

#forcer une nouvelle compilation
rebuild: clean prog 

