2016-07-07 13 views
0

Wenn Sie make all --print-data-base tun, um zu bestimmen, können Sie diese Art von Ausgabe zu erhalten, nachdem eine bestimmte Make-Datei ausgeführt wird ausgeführt wird:GNU machen - wie Namen + Pfad der Make-Datei von --print-Datenbasis Ausgabe

... 
# default 
LINK.o = $(CC) $(LDFLAGS) $(TARGET_ARCH) 
# default 
OUTPUT_OPTION = -o [email protected] 
# environment 
QT_INSTALL_PLUGINS = C:/Users/mureadr/Desktop/A/HMI_FORGF/qt5binaries/plugins 
# default 
COMPILE.cpp = $(COMPILE.cc) 
# environment 
PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW 
# makefile (from 'Makefile', line 1) 
MAKEFILE_LIST := C:/Users/mureadr/Desktop/A/ImpTarget.mk Makefile 
# environment 
TMP = C:/Temp 
... 

Das aktuelle Verzeichnis ist einfach gleich CURDIR - nicht gezeigt - aber der Name von Makefile ist nicht so einfach.

Mit Blick auf 6.14 Other Special Variables: MAKEFILE_LIST, es scheint die Antwort ist: Blick auf den ersten Eintrag von MAKEFILE_LIST und das ist der Name des Makefile. Wenn Sie jedoch ein Makefile an make über make all --print-data-base MAKEFILES=MyMake.mk übergeben, wird der erste Eintrag MyMake.mk sein.

Daher scheint die Regel zu sein: Blick auf der Variable -*-command-variables-*- und bestimmen, ob eine Make-Datei in geben wurde Wenn ja, diskontieren sie von den variablen MAKEFILE_LIST und der ersten Saite von den übrigen Einträgen ist der Name des Makefiles. .

FRAG

Gibt es noch andere 'gotchas', die etwas in var MAKEFILE_LIST vor der echten Make-Datei einfügen würde?

+1

Die kurze Antwort ist, dass 'MAKEFILE_LIST' eine durch Leerzeichen getrennte Liste von Dateinamen enthält, die von den Makefiles analysiert werden, in der Reihenfolge, in der sie geparst werden. Jede Funktion, die bewirkt, dass Makefiles analysiert werden, ändert diese Liste. Dazu gehören die 'MAKEFILES' -Variable, die Namen, die der Option' -f' in der Befehlszeile zur Verfügung gestellt werden, die Namen, die für '-f'-Optionen bereitgestellt werden, die in den Variablen' MAKEFLAGS' oder 'GNUMAKEFLAGS' vorkommen 'Direktiven. Das ist alles, was ich mir aus dem Kopf denken kann. – MadScientist

+0

@MadScientist aus der Ausgabe von 'make' ist es möglich zu schließen, ob Makefile mit' MAKEFILES = '? Das ist alles was ich wirklich brauche. – Adrian

+0

Sie meinen, von der Ausgabe von 'make -p'? Warum prüfen Sie nicht einfach den Inhalt der ausgedruckten 'MAKEFILES'-Variable? – MadScientist

Antwort

0

Suchen Sie nach -*-command-variables-*- im --print-data-base Ausgang und wenn es vorhanden ist und setzt die var MAKEFILES - wie in make all MAKEFILES=thing.mk - dann wissen Sie, dass alles, was er gesetzt ist in jedem MAKEFILE_LIST zuerst erscheint das heißt vor dem Namen der eigentlichen Make-Datei.

Wenn Sie Querverweis mit

MAKEFILE_LIST := thing.mk Makefile cfg.mk 

Sie wissen werden, dass der Name der aktuellen Make-Datei Makefile ist und alles erscheint nach sind Makefiles in lesen, weil sie an der Spitze include d waren.