Was bewirkt ein Prozentzeichen in einem Makefile?
Habe ich ein makefile, das wie folgt aussieht :
include $(patsubst %,$(src)/%/Make.tests, $(TEST_SUBDIRS))
%-test:
Something here
Verstehe ich, was es ist vorgesehen, für die in der Ziel-Regel-Linie. Was ist die %
Zeichen in der ersten Zeile ? Hat es was zu tun Prozentzeichen in die Ziel-Regel-Linie ?
Wenn ich Schreibe make sometarget
, sind die Zeilen in der makefile, die sind nicht so geschrieben, als Teil von Regel (wie die erste Zeile in das makefile) ausgeführt ? Wenn ja, was ist dann die Reihenfolge der Ausführung ?
InformationsquelleAutor der Frage AnkurVj | 2011-09-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie Sie Lesen können in das GNU make manual, die Prozent fungiert als Platzhalter. Das erste argument der
patsubst
Funktion bildet das Muster. Jedes Element/Wort in das Letzte argument ist ein Vergleich mit diesem Muster, und wenn es passt, wird es ersetzt mit dem zweiten argument. Wenn es ein wildcard-Zeichen (%) im Muster, dadurch wird eine beliebige Anzahl von Zeichen, und diese Zeichen werden kopiert, in der Ersatz-Zeichenfolge an der Stelle des % im zweiten argument.In deinem Beispiel das Muster wird nur das wildcard-symbol, so dass es passt jedes Wort in dem letzten argument der Funktion, und dieses Wort wird kopiert und in die Ersatz-Zeichenfolge (das zweite argument) an der Stelle des %.
Einem Beispiel machen kann, die Dinge mehr klar. Nehmen wir an
TEST_SUBDIRS
enthält zwei Namen.Dies ist dann äquivalent zu dem folgenden.
Makefile verarbeitet sequentiell, Zeile für Zeile. Variablen-Zuweisungen sind "internalisiert", und include-Anweisungen führen den Inhalt der anderen Dateien eingefügt werden, buchstäblich an, die Lage nach dem die Inhalte verarbeitet wird, als Teil des makefile.
Ein dependency-graph wird gebildet aus den Regeln, wie Sie eingelesen werden, und nachdem die gesamte Datei verarbeitet wird, werden die notwendigen Rezepte ausgeführt werden, aktualisieren Sie das angeforderte Ziel.
InformationsquelleAutor der Antwort eriktous