Präprozessorlauf eines Makefiles
Sie können die NMAKE-Sitzung mithilfe von Präverarbeitungsdirektiven und Ausdrücken steuern. Vorverarbeitungsanweisungen können in der Makefile oder in Tools.ini
platziert werden. Mithilfe von Direktiven können Sie Ihre Makefile-Datei bedingt verarbeiten, Fehlermeldungen anzeigen, andere Makefiles einschließen, ein Makro rückgängig machen und bestimmte Optionen aktivieren oder deaktivieren.
Anweisungen für den Präprozessorlauf eines Makefiles
Bei Vorverarbeitungsdirektiven wird die Groß-/Kleinschreibung nicht beachtet. Das anfängliche Ausrufezeichen (!
) muss am Anfang der Zeile angezeigt werden. Null oder mehr Leerzeichen oder Tabstopps können nach dem Ausrufezeichen für den Einzug angezeigt werden.
!CMDSWITCHES
{+
Optionsoption-
| } ...Aktiviert oder deaktiviert jede aufgelistete Option . Leerzeichen oder Registerkarten müssen vor dem Operator oder
-
dem+
Operator angezeigt werden. Zwischen dem Operator und den Optionsbuchstaben können keine Leerzeichen angezeigt werden. Bei Buchstaben wird die Groß-/Kleinschreibung nicht beachtet und ohne Schrägstrich (/
) angegeben. Wenn Sie einige Optionen aktivieren und andere deaktivieren möchten, verwenden Sie separate Spezifikationen von!CMDSWITCHES
.Nur
/D
,/I
, ,/N
und/S
kann in einer Makefile verwendet werden. InTools.ini
, alle Optionen sind zulässig, außer/F
,/HELP
, ,/NOLOGO
,/X
und/?
. Änderungen, die in einem Beschreibungsblock angegeben sind, werden erst wirksam, wenn der nächste Beschreibungsblock angezeigt wird. Diese Direktive aktualisiertMAKEFLAGS
; Änderungen werden während der Rekursion geerbt, wennMAKEFLAGS
angegeben.!ERROR
TextZeigt Text in Fehler U1050 an, hält nmAKE an, auch wenn
/K
der Befehlsmodifizierer (-
) verwendet wird./I
.IGNORE
!CMDSWITCHES
Leerzeichen oder Tabstopps, bevor Text ignoriert wird.!MESSAGE
TextZeigt Text für die Standardausgabe an. Leerzeichen oder Tabstopps, bevor Text ignoriert wird.
!INCLUDE
[ ] Dateiname [>
<
]Liest den Dateinamen als Makefile und setzt dann mit der aktuellen Makefile fort. NMAKE sucht zuerst im angegebenen oder aktuellen Verzeichnis nach Dateinamen , rekursiv durch Verzeichnisse aller übergeordneten Makefiles, und wenn der Dateiname durch winkelige Klammern (
< >
) eingeschlossen wird, in Verzeichnissen, die durch dasINCLUDE
Makro angegeben werden, die anfänglich auf dieINCLUDE
Umgebungsvariable festgelegt sind. Nützlich zum Übergeben.SUFFIXES
von Einstellungen,.PRECIOUS
und Rückschlüssen auf rekursive Makefiles.!IF
constant_expressionVerarbeitet Anweisungen zwischen
!IF
und dem nächsten!ELSE
oder!ENDIF
wenn constant_expression einen Wert ungleich Null auswertet.!IFDEF
macro_nameVerarbeitet Anweisungen zwischen
!IFDEF
und dem nächsten!ELSE
oder!ENDIF
wenn macro_name definiert ist. Ein NULL-Makro wird als definiert betrachtet.!IFNDEF
macro_nameVerarbeitet Anweisungen zwischen
!IFNDEF
und dem nächsten!ELSE
oder!ENDIF
wenn macro_name nicht definiert ist.!ELSE
[IF
constant_expression macro_name | |IFDEF
IFNDEF
macro_name ]Verarbeitet Anweisungen zwischen
!ELSE
und dem nächsten!ENDIF
, wenn die vorherige!IF
,!IFDEF
oder!IFNDEF
Anweisung auf Null ausgewertet wird. Die optionalen Schlüsselwörter ermöglichen eine weitere Kontrolle über die Vorverarbeitung.!ELSEIF
Synonym für
!ELSE IF
.!ELSEIFDEF
Synonym für
!ELSE IFDEF
.!ELSEIFNDEF
Synonym für
!ELSE IFNDEF
.!ENDIF
Markiert das Ende eines
!IF
,!IFDEF
oder!IFNDEF
eines Blocks. Jeder Text, der sich!ENDIF
in derselben Zeile befindet, wird ignoriert.!UNDEF
macro_nameUndefines macro_name.
Ausdrücke für den Präprozessorlauf eines Makefiles
Die !IF
oder !ELSE IF
constant_expression besteht aus ganzzahligen Konstanten (in dezimaler oder C-Sprachnotation), Zeichenfolgenkonstanten oder Befehlen. Verwenden Sie Klammern, um Ausdrücke zu gruppieren. Ausdrücke verwenden eine C-Formatvorlage, die lange ganzzahlige Arithmetik signiert hat; Zahlen sind in 32-Bit-Zwei-Komplementform im Bereich -2147483648 bis 2147483647.
Ausdrücke können Operatoren verwenden, die auf Konstantenwerte reagieren, Beendigungscodes von Befehlen, Zeichenfolgen, Makros und Dateisystempfaden.
Operatoren für den Präprozessorlauf eines Makefiles
Makefile-Vorverarbeitungsausdrücke können Operatoren verwenden, die auf konstante Werte, Exitcodes von Befehlen, Zeichenfolgen, Makros und Dateisystempfade angewendet werden. Zum Auswerten des Ausdrucks erweitert der Präprozessor zuerst Makros und führt dann Befehle aus und führt dann die Vorgänge aus. Sie wertet Vorgänge in Der Reihenfolge der expliziten Gruppierung in Klammern und dann in Reihenfolge der Rangfolge des Operators aus. Das Ergebnis ist ein konstanter Wert.
Der DEFINED
Operator ist ein logischer Operator, der auf einen Makronamen wirkt. Der Ausdruck DEFINED( macro_name )
ist "true", wenn macro_name definiert ist, auch wenn er keinen zugewiesenen Wert aufweist. DEFINED
in Kombination mit oder gleichbedeutend mit !IF
oder ist gleichbedeutend mit !IFDEF
oder !ELSE IF
!ELSE IFDEF
. Im Gegensatz zu diesen Direktiven DEFINED
kann jedoch in komplexen Ausdrücken verwendet werden.
Der EXIST
Operator ist ein logischer Operator, der auf einem Dateisystempfad fungiert. EXIST( path )
ist "true", wenn der Pfad vorhanden ist. Das Ergebnis kann EXIST
in binären Ausdrücken verwendet werden. Wenn der Pfad Leerzeichen enthält, schließen Sie ihn in doppelte Anführungszeichen ein.
Um zwei Zeichenfolgen zu vergleichen, verwenden Sie den Gleichheitsoperator (==
) oder den Ungleichheitsoperator (!=
). Schließen Sie Zeichenfolgen in doppelte Anführungszeichen ein.
Ganze Zahlenkonstanten können die unären Operatoren für die numerische Negation (-
), die Komplementierung (~
) und die logische Negation () verwenden!
.
Ausdrücke können die folgenden Operatoren verwenden. Die Operatoren mit gleichem Rang werden zusammengruppiert, und die Gruppen werden absteigender Rangfolge aufgelistet. Unäre Operatoren werden dem Operanden rechts zugeordnet. Binäre Operatoren mit gleichem Rang werden den Operanden von links nach rechts zugeordnet.
Operator | Beschreibung |
---|---|
DEFINED( macro_name ) |
Erzeugt einen Wahrheitswert für den aktuellen Definitionsstatus von macro_name. |
EXIST( Pfad ) |
Erzeugt einen Wahrheitswert für das Vorhandensein einer Datei im Pfad. |
! |
Unäres logisches NOT. |
~ |
Unäre Ergänzung. |
- |
Unäre Negation. |
* |
Multiplikation. |
/ |
Division. |
% |
Modul (Rest). |
+ |
Addition. |
- |
Subtraktion. |
<< |
Bitweise Verschiebung links. |
>> |
Bitweise Verschiebung rechts. |
<= |
Kleiner oder gleich. |
>= |
Größer oder gleich. |
< |
Kleiner als. |
> |
Größer als. |
== |
Gleichheit. |
!= |
Ungleichheit. |
& |
Bitweises AND. |
^ |
Bitweises XOR. |
| |
Bitweises OR. |
&& |
Logisches AND. |
|| |
Logisches OR. |
Hinweis
Der bitweise XOR-Operator (^
) ist identisch mit dem Escapezeichen und muss bei Verwendung in einem Ausdruck escapezeichen (als ^^
) sein.
Ausführen eines Programms im Präprozessorlauf
Wenn Sie den Ausgangscode eines Befehls während der Vorverarbeitung verwenden möchten, geben Sie den Befehl mit allen Argumenten in eckigen Klammern ([ ]
) an. Alle Makros werden erweitert, bevor der Befehl ausgeführt wird. NMAKE ersetzt die Befehlsspezifikation durch den Beendigungscode des Befehls, der in einem Ausdruck zum Steuern der Vorverarbeitung verwendet werden kann.
Beispiel
!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF