Bonjour à tous !

Voilà mon soucis : j'ai une classe C++ définie dans les fichiers lib.cpp et lib.h, ainsi que les tests dans mon main, dans le fichier main.cpp.

Mon Makefile ressemble à :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
main: main.o lib.o
	@echo "-- Linking --"
	$(CPP) -o $@ $^
 
%.o : %.cpp %.h
	@echo "-- Compiling libs--"
	$(CPP) -c $< -o $@
 
main.o: main.cpp
	@echo "-- Compiling main --"
	$(CPP) -c $< -o $@
Jusque là tout va bien (le tuto "Introduction à Makefile" de gl m'ayant particulièrement aidé, merci à lui !).
Le problème vient de ce que j'ai en fait une vingtaine de classes (donc un .cpp et un .h à chaque fois), et à peu près autant de fichiers de tests (seulement un .cpp à chaque fois). Et cette manière de faire m'est imposée par mon client (ben oui sinon c'est pas drôle...).

Comment puis-je créer uniquement deux instructions dans mon makefile pour lui dire de faire quelque chose dans le genre :
  1. si un .h existe, utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %.o : %.cpp %.h
    	$(CPP) -c $< -o $@
  2. sinon, utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    %.o : %.cpp
    	$(CPP) -c $< -o $@


Pour l'instant la seule solution que j'ai trouvée est de garder la cible générique pour les cpp et h, et de créer les cibles en dur pour chacun des autres fichiers... pas très sympathique !

Quelqu'un aurai-il une solution pour rendre mon makefile plus générique ?

D'avance merci !