Makefile Frage
-
Ich bin mir jetzt nicht sicher ob meine Frage in diesen Forumsteil passt, aber es erscheint mir erstmal am plausibelsten.
Okay ich habe C++ Code von jemandem bekommen den ich verwenden soll. Er hat auch freundlicherweise gleich ein Makefile mit geliefert. Leider verstehe ich nicht alle Zeilen in diesem Makefile und hoffe, dass mir einer von Euch helfen kann.
Folgende Zeile ist mir zB nicht klar:
$(DETOPPFILES): $(patsubst %.o, %.cpp, $@)
g++ $(DDOSCPPFLAGS) -o $@ -c $(patsubst %.o, %.cpp, $@)Was "(DDOSCPPFLAGS)" ist, ist mir klar. Was aber bedeutet "$(patsubst %.o, %.cpp, @)" und was bedeutet überhaupt "@"? Das sehe ich recht häufig.
Googlen kann man leider ja nicht nach "$@", weil man nicht nach Sonderzeichen googlen kann.
-
Hi,
$@ steht für den Namen des Make-Ziels.
patsubst ist eine Textersetzung mit Unterstützung von Regular Expressions.
Wenn ich meine geringen Kenntnisse in RegEx mal benutze (ist möglicherweise falsch, aber klingt fur mich ganz plausibel):
1. Wir haben ein Target, mit dem Namen $(DETOPPFILES), was irgendetwas mit .o am Ende ist. Sagen wir beispielsweise mal foo.o
2. Dieses target ist abhängig von $(patsubst %.o, %.cpp, $@). Dieser Ausdruck, nimmt $@, hier foo.o, sucht nach Dem Muster irgendwas.o und ersetzt es durch irgendwas.cpp. foo.o ist also abhängig von foo.cpp, was ja auch vernünftig ist.
3. Gleiches Schema bei der Anleitung wie das Target zu erstellen ist: Das Outputfile ist $@, also foo.o, und als Source wird foo.cpp genommen.Oder alles eingesetzt:
foo.o: foo.cpp g++ $(DDOSCPPFLAGS) -o foo.o -c foo.cpp
-
Super, vielen Dank für die Antwort.