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
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).
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)
J'ai bien noté la technique du
.. mais mes modules.o ne dependent pas que de leur .c et dependent rarement des memes headers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 %.o: %.c @$(CC) -o $@ -c $< $(CFLAGS)
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
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
4
5
6
7
8
9 ifeq($(VERSION),) VERSIONDIR = . else VERSIONDIR = $(VERSION) endif OBJDIR = $(VERSIONDIR)/obj SRCDIR = $(VERSIONDIR)/ BINDIR = $(VERSIONDIR)/
Alors, une idée pour arranger ça?
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)
Merci
Partager