Je dᅵmarre un makefile avec GNU Make
De la mᅵme faᅵon qu'il existe la variable $^ qui retourne les dᅵpendances
directes, existe t-il une variable de la sorte pour lister toutes les
dᅵpendances et sous-dᅵpendances (rᅵcursivement) ?
D'avance merci pour votre aide,
-TSalm
Pas ᅵ ma connaissance.
Et je ne vois pas d'utilitᅵ ᅵ le faire.
--
Michael
Pas d'utilitᅵ ? C'est peut-ᅵtre alors qu'il y a quelquechose qui m'ᅵchappe.
J'ai fait quelquechose comme ceci (j'ᅵpargne certains dᅵtails superflus ) :
============= Makefile ==================
mon_obj1.o:
$(CPP) $(CPPFLAGS) -c $*.cpp -o $@
mon_obj2.o: mon_obj1.o
$(CPP) $(CPPFLAGS) -c $*.cpp -o $@
mon_obj3.o: mon_obj2.o
$(CPP) $(CPPFLAGS) -c $*.cpp -o $@
mon_exe_final: mon_obj3.o
$(CPP) $(LDFLAGS) $??? -o $@
==============================================
Je voudrais que <<$???>> soit remplacer par tous les objets dont
<<mon_exe_final>> dᅵpends, c'est ᅵ dire <<mon_obj1.o>>, <<mon_obj2.o>> et
<<mon_obj3.o>>.
Ainsi, si je devais ajouter une autre dᅵpendance dans <<mon_obj2.o>> par
exemple, elle serait rᅵpercutᅵe dans mon_exe_final sans effort inutile de
ma part.
Je n'ai pas pris la bonne direction ?
Les *dependances* deja. Il n'y a aucune raison que mon_obj2.o depende de
mon_obj1.o. Par contre, toutes les raisons qu'il depende de mon_obj2.cpp
Les noms de variables ensuite. CPPFLAGS, traditionnellement, c'est pour le
preprocesseur. Et CPP aussi. On utilise CXXFLAGS et CXX pour le nom du
compilo. Egalement, il *faut* repasser CXXFLAGS a l'editeur de liens.
Ton Makefile ressemblerait a ca en vrai:
OBJS = mon_obj1.o mon_obj2.o mon_obj3.o
mon_exe_final: $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $@
mon_obj1.o: mon_obj1.cpp
$(CXX) $(CXXFLAGS) -c $*.cpp
mon_obj2.o: mon_obj2.cpp
$(CXX) $(CXXFLAGS) -c $*.cpp
mon_obj3.o: mon_obj3.cpp
$(CXX) $(CXXFLAGS) -c $*.cpp
Et en pratique, on peut faire plus court avec utilisation de suffix rules.
Normalement, make connaitra meme .cpp -> .o, mais s'il faut lui dire:
.SUFFIXES: .cpp .o
.cpp.o:
$(CXX) $(CXXFLAGS) -c $*.cpp
OBJS = mon_obj1.o mon_obj2.o mon_obj3.o
mon_exe_final: $(OBJS)
$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJS) -o $@
A ca, il faut eventuellement rajouter tes dependances sur des .hpp, par
exemple:
mon_obj1.o mon_obj2.o: mon_obj1.hpp
en supposant que mon_obj1 et mon_obj2 utilisent tous les deux le fichier
d'entetes en question.
Note que c'est juste une ligne de dependances, les regles de prod existent
deja, pas besoin d'y toucher...
> In article <op.u34nmnk2k9rspk@papillon>, TSalm <ts...@free.fr> wrote:
>> ============= Makefile ==================
>> mon_obj1.o:
>> $(CPP) $(CPPFLAGS) -c $*.cpp -o $@
>>
>> mon_obj2.o: mon_obj1.o
>> $(CPP) $(CPPFLAGS) -c $*.cpp -o $@
>>
>> mon_obj3.o: mon_obj2.o
>> $(CPP) $(CPPFLAGS) -c $*.cpp -o $@
>>
>> mon_exe_final: mon_obj3.o
>> $(CPP) $(LDFLAGS) $??? -o $@
>> ==============================================
>>
>> Je voudrais que <<$???>> soit remplacer par tous les objets dont
>> <<mon_exe_final>> dᅵpends, c'est ᅵ dire <<mon_obj1.o>>, <<mon_obj2.o>>
>> et
>> <<mon_obj3.o>>.
>> Ainsi, si je devais ajouter une autre dᅵpendance dans <<mon_obj2.o>> par
>> exemple, elle serait rᅵpercutᅵe dans mon_exe_final sans effort inutile
>> de
>> ma part.
>>
>> Je n'ai pas pris la bonne direction ?
>>
> Okay, tu n'as a peu pres rien compris, helas.
Ah? Ok c'est toujours sympa ᅵ entendre :-)
>
> Les *dependances* deja. Il n'y a aucune raison que mon_obj2.o depende de
> mon_obj1.o. Par contre, toutes les raisons qu'il depende de mon_obj2.cpp
>
Et si je comprends, il est dᅵpendant aussi de <<mon_obj2.hpp>> et
<<mon_obj1.hpp>>.
Merci pour ces explications.