Makefile für GNU-Make
-
Hallo alle!
Ich habe da ein kleines Verständnisproblem bei meinem Makefile:DEST = login logout MOBJ = $(DEST:=.o) $(MOBJ): $(@:.o=.cpp) $(CXX) $(CCFLAGS) -c $(@:.o=.cpp) $(DEST): $(@:=.o) $(OBJS) $(LIBS) make $(@:=.o) $(CXX) $^ $(@:=.o) -o $@
So wie es hier ist, funktioniert es ( also so ich hoffe ich habe nichts wichtiges weggelassen, ich habe da etwas gekürzt um das Problem nicht zu verbuddeln )!
Unschön finde ich das rekursive Aufrufen, aber ohne das
make $(@:=.o)
meint Make es könne login.o nicht finden
Auch wenn ich z.B. login.o lösche, sollte wegen des$(@:=.o)
das Binary neu erzeugt werden, wird aber nicht!
Was mache ich falsch
-
Habe es gefunden!
$@ wird bei den Vorraussetzungen nicht ersetzt, daher wird$(@:=.o)
einfach durch NICHTS ersetzt!
Man kann aber$(DEST): % : %.o $(OBJS) $(LIBS)
schreiben, dann geht es.
Da zeigt sich mal wider: "Wer lesen kann ist klar im Vorteil!"
Das ganze nennt sich "Syntax of Static Pattern Rules" wenn man das nur vorher gewust hätte...