Salut,

Je suis sur un projet qui contient environ une 50aine de sources et le makefile doit pouvoir produire tous les executable qui le composent. Pour qu'on y voit clair apres avoir compilé, j'ai deja fait en sorte que les fichiers objets soient mis dans un sousrepertoire du projet, sauf que je m'aperçois que c'est un peu lourdingue : je dois ecrire une variable pour chaque fichier objet à produire sinon ça serait encore plus lourd à écrire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
OBJDIR = obj
.....
 
MONMODULE_O = $(OBJDIR)/monmodule.o
$(MONMODULE_O) : monmodule.c monmodule.h header1.h header2.h
    gcc $(CFLAGS) -c monmodule.c -o $(MONMODULE_O)
A ce stade c'est pas encore trop crado, mais y a t il une meilleure solution? Sachant que ceci va se repeter pour chaque source (avec differentes dependances).
J'ai bien noté la technique du
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
%.o: %.c
	@$(CC) -o $@ -c $< $(CFLAGS)
.. mais mes modules.o ne dependent pas que de leur .c et dependent rarement des memes headers.

Maintenant, j'aimerais creer un systeme de versions, une version qu'on passerait en parametre en appelant make, ex "make monprogramme VERSION=pouet". J'aurais une variable pour le chemin des sources, une pour les objets, et une pour les executables. Chemins qui seraient valorisés en fonction de la version

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
ifeq($(VERSION),)
    VERSIONDIR = .
else
    VERSIONDIR = $(VERSION)
endif
OBJDIR = $(VERSIONDIR)/obj
SRCDIR = $(VERSIONDIR)/
BINDIR = $(VERSIONDIR)/
Le probleme c'est que ça devient carrement lourd pour ecrire le chemin des sources à compiler et surtout à mettre en dependances

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
MONMODULE_O = $(OBJDIR)/monmodule.o
$(MONMODULE_O) : $(SRCDIR)/monmodule.c $(SRCDIR)/monmodule.h $(SRCDIR)/header1.h $(SRCDIR)/header2.h
    gcc $(CFLAGS) -c $(SRCDIR)/monmodule.c -o $(MONMODULE_O)
Alors, une idée pour arranger ça?
Merci