1

Wie kann ich Makros zwischen nmake-Aufrufe weiterleiten?Wie Makros zwischen nmake-Aufrufe weitergeleitet werden?

Lassen Sie uns sagen, wir haben

--- a.mak --- 

some_variable = value 

all: 
    nmake -f b.mak 

--- END --- 

--- b.mak --- 

all: 
    @echo some_variable = WHAT TO PUT HERE TO GET VALUE OF some_variable? 

--- END --- 

ich verschiedene Dinge versuchte, wie mit Satz und setx Befehle aber Wert der Variablen Satz in Mutter Make-Datei ist nicht sichtbar in Makefiles aus sie aufgerufen werden.

Antwort

1

Hier ist die Info von MSDN über calling nmake recursively:

Verwenden Rekursion Makros NMAKE rekursiv aufzurufen. Rekursive Sitzungen erben Befehlszeilen- und Umgebungsvariablemakros und Tools.ini-Informationen. Sie erben keine makefile-definierten Inferenzregeln oder .SUFFIXES- und .PRECIOUS-Spezifikationen. Um Makros an eine rekursive NMAKE-Sitzung zu übergeben, setzen Sie entweder eine Umgebungsvariable mit SET vor dem rekursiven Aufruf, definieren Sie einen Makro im Befehl für den rekursiven Aufruf oder definieren Sie ein Makro in Tools.ini.

So können Sie a.mak aussehen machen:

# ---- a.mak ---- 
some_variable = value 

all: 
    nmake -f b.mak some_variable=$(some_variable) 
#--- END --- 

Beachten Sie auch, dass der set Sommand mit der Variable in der Umgebung zu setzen, wie gut funktioniert, aber nmake nutzen automatisch Umgebungsvariablen (auch für seltsame wie "windir", die aus irgendeinem Grund im System Kleinbuchstaben ist, und Groß-und Kleinschreibung, so dass die Variable verwenden, müssen Sie die Variable in Großbuchstaben verwenden.

From MSDN:

geerbt Namen in Großbuchstaben umgewandelt werden. Die Vererbung erfolgt, bevor die Vorverarbeitung

So, hier ist was Ihre b.mak aussehen soll, wenn du gehst um die Variable zu übergeben mit der Umwelt statt explizit auf der Kommandozeile:

#--- b.mak --- 
all: 
    @echo some_variable is: $(SOME_VARIABLE) 
#--- end --- 

Aus diesem Grunde, Es ist wahrscheinlich keine schlechte Idee, eine All-Caps-Namenskonvention für nmake-Makronamen zu standardisieren.

0

Vielleicht sollten Sie in Betracht ziehen, nicht rekursiv aufzurufen, siehe das Papier Recursive Make Considered Harmful. Sie können immer noch modulare Dateien haben, die den Makefiles ähnlich sind, die Sie bereits haben (von make eingeschlossen), nur dass die Regeln nur in einem Makefile auf oberster Ebene definiert sind.