Ich bin mir nicht sicher, was genau Sie erklären möchten. Dies ist eine Befehlszeile, die das Programm makedepend
aufruft, leitet seinen stderr zu nul:
um (sieht so aus, als würde dies auf einem DOS-System ausgeführt werden? Aber mit UNIX-Tools wie sed?) Und sendet seine Ausgabe an sed
. Das Programm sed
konvertiert den Dateinamen .o
in der Ausgabe von makedepend in den tatsächlichen Zielnamen (einschließlich des Pfads) und konvertiert umgekehrte Schrägstriche in Schrägstriche.
Dann werden die Ergebnisse in eine .d
Datei geschrieben. Vermutlich irgendwo im Makefile finden Sie eine Zeile, die include
verwendet, um alle .d
Dateien einzuschließen.
Im Grunde ist dies eine Möglichkeit, automatisch Header-Dateiabhängigkeiten zu generieren, so dass make Objektdateien neu erstellt, wenn sie sich ändern, ohne dass Sie sie alle manuell in das Makefile schreiben müssen.
ETA
- $ (Q)
A macht variable Referenz, die entweder an @
erweitert wahrscheinlich ist oder nicht, Ausführlichkeit der Make-Datei zu steuern.
- makedepend $ (CFLAGS) -oo -f- $ <
Invoke makedepend
mit den CFLAGS
Optionen und die Ergebnisse an stdout (-f-
) schreiben, um die Quelldatei zu lesen ($<
)
- 2> nul:
Redirect stderr zu nul:
, die auf Windows ein Sonderzeichen Gerät ist, was bedeutet "wegwerfen".
- |
Senden Sie die Ausgabe des vorherigen Befehls an die Eingabe des nächsten Befehls.
- sed
Führen Sie den sed (Stream-Editor) Programm, das ein UNIX/POSIX-Programm, das Dateien auf einer Zeile-für-Zeile-Basis (in der Regel) manipuliert.
- -e s! $ (<: .cpp = .o)! $ @!
Die erste Manipulation ersetzt die Klarnamen der Objektdatei (zB wenn Sie kompilieren foo.cpp
dann $<
foo.cpp
sind, und $(<:.cpp=.o)
ersetzt die .cpp
mit einem .o
so das Ergebnis ist foo.o
) mit dem Namen des Ziels: [email protected]
wird der vollständige Zielname wie obj/foo.o
sein, wenn OBJECTDIR
obj
ist.
- -e s! \\! /!g
Die zweite Substitution ersetzt alle umgekehrten Schrägstriche (aus der Shell entfernt, also \\
) mit Schrägstrichen.
- > $ (@ :. o = .d)
Schreiben Sie den Ausgang des sed-Befehl in die Datei [email protected]
mit dem ersetzten .o
durch .d
, also wenn OBJECTDIR
obj
ist, wird es zu obj/foo.d
schreiben
Ich habe den Punkt verstanden, danke dafür, aber können Sie bitte die Aussage brechen und erklären, welcher Teil was macht? –