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.iniplatziert 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.

Makefile-Vorverarbeitungsdirektiven

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, , /Nund /S kann in einer Makefile verwendet werden. In Tools.ini, alle Optionen sind zulässig, außer /F, /HELP, , /NOLOGO, /Xund /?. Änderungen, die in einem Beschreibungsblock angegeben sind, werden erst wirksam, wenn der nächste Beschreibungsblock angezeigt wird. Diese Direktive aktualisiert MAKEFLAGS; Änderungen werden während der Rekursion geerbt, wenn MAKEFLAGS angegeben.

  • !ERRORtext

    Zeigt Text in Fehler U1050 an, hält nmAKE an, auch wenn /Kder Befehlsmodifizierer (-) verwendet wird. /I.IGNORE!CMDSWITCHES Leerzeichen oder Tabstopps, bevor Text ignoriert wird.

  • !MESSAGEtext

    Zeigt 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 das INCLUDE Makro angegeben werden, die anfänglich auf die INCLUDE Umgebungsvariable festgelegt sind. Nützlich zum Übergeben .SUFFIXES von Einstellungen, .PRECIOUSund Rückschlüssen auf rekursive Makefiles.

  • !IFconstant_expression

    Verarbeitet Anweisungen zwischen !IF und dem nächsten !ELSE oder !ENDIF wenn constant_expression einen Wert ungleich Null auswertet.

  • !IFDEFmacro_name

    Verarbeitet Anweisungen zwischen !IFDEF und dem nächsten !ELSE oder !ENDIF wenn macro_name definiert ist. Ein NULL-Makro wird als definiert betrachtet.

  • !IFNDEFmacro_name

    Verarbeitet Anweisungen zwischen !IFNDEF und dem nächsten !ELSE oder !ENDIF wenn macro_name nicht definiert ist.

  • !ELSE[ IFconstant_expression macro_nameIFDEF | macro_name ] | IFNDEF

    Verarbeitet Anweisungen zwischen !ELSE und dem nächsten !ENDIF , wenn die vorherige !IF, !IFDEFoder !IFNDEF Anweisung auf Null ausgewertet wird. Die optionalen Schlüsselwort (keyword) 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, !IFDEFoder !IFNDEF eines Blocks. Jeder Text, der sich !ENDIF in derselben Zeile befindet, wird ignoriert.

  • !UNDEFmacro_name

    Undefines macro_name.

Ausdrücke in makefile preprocessing

Die !IF oder !ELSE IFconstant_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.

Makefile-Vorverarbeitungsoperatoren

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. DEFINEDin 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(path) 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 bei der Vorverarbeitung

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

Siehe auch

NMAKE Reference (NMAKE-Referenz)