Verwenden eines NMAKE-Makros

Um ein Makro zu verwenden, schließen Sie den Namen in Klammern ein, die einem Dollarzeichen ($) wie folgt vorangestellt sind:

$(macro_name)

Leerzeichen sind nicht zulässig. Die Klammern sind optional, wenn macro_name ein einzelnes Zeichen ist. Die Definitionszeichenfolge ersetzt ; ein nicht definiertes $(macro_name)Makro wird durch eine NULL-Zeichenfolge ersetzt.

Makroersetzung

Wenn macro_name aufgerufen wird, wird jedes Vorkommen von Zeichenfolge1 in seiner Definitionszeichenfolge durch Zeichenfolge2 ersetzt.

$(macro_name:string1=string2)

Bei der Makroersetzung wird die Groß-/Kleinschreibung beachtet und literal. Zeichenfolge1 und Zeichenfolge2 können keine Makros aufrufen. Ersetzung ändert die ursprüngliche Definition nicht. Sie können Text in jedem vordefinierten Makro mit Ausnahme $$@von .

Keine Leerzeichen oder Tabstopps vor dem Doppelpunkt (:); alle Leerzeichen oder Tabstopps nach dem Doppelpunkt werden als Literal interpretiert. Wenn Zeichenfolge2 null ist, werden alle Vorkommen von Zeichenfolge1 aus der Definitionszeichenfolge des Makros gelöscht.

Makrofunktionen

NMAKE bietet eine Reihe von Funktionen, die zum Ändern von Zeichenfolgen, Listen von Elementen und Dateipfaden verwendet werden können. Diese Funktionen sind ab Visual Studio 2022 in NMAKE verfügbar.

Funktionssyntax

Funktionen verwenden die folgende Syntax:

$(function_name arg0,arg1,arg2...)

Argumente für eine Funktion können eine beliebige Zeichenfolge sein und verschachtelte Makroaufrufe enthalten. Mit Ausnahme von Sonderfällen können Argumente nicht null sein.

Alle zusätzlichen Leerzeichen zwischen dem Funktionsnamen und der Argumentliste werden ignoriert. Wenn für das erste Argument führende Leerzeichen erforderlich sind, verwenden Sie ein Makro, das die erforderlichen Leerzeichen enthält:

SINGLESPACE=$(subst ',,' ') # Use "subst" since a normal assignment trims trailing whitespace.
$(subst $(SINGLESPACE)an,irec,red ant) # Evaluates to "redirect"

Kommas in einer Argumentliste werden immer als Argumenttrennzeichen betrachtet und können nicht escaped sein. Wenn für ein Argument ein Literaltrennzeichen erforderlich ist, verwenden Sie stattdessen ein Makro, das ein Komma enthält:

COMMA=,
INPUT=a, b
$(subst $(COMMA) , and ,$(INPUT)) # Evaluates to "a and b"

Listensyntax

Einige Funktionen unterstützen eine durch Leerzeichen getrennte Liste von Elementen. Zusätzliche Leerzeichen werden am Anfang der Liste, am Ende der Liste oder zwischen jedem Element ignoriert. Listen, die von einer Funktion erstellt werden, verwenden ein einzelnes Leerzeichen zwischen jedem Element als Trennzeichen und weisen keine führenden oder nachgestellten Leerzeichen auf.

Beispielsweise ist stripdie einfachste Listenfunktion , die ein einzelnes Listenargument verwendet und eine Liste mit genau denselben Elementen erzeugt (aber mit dem Leerzeichen, sauber wie oben dargestellt):

$(strip a   b   c d    ) # Evaluates to "a b c d"

Mustersyntax

Einige Funktionen unterstützen die Verwendung eines Musters. Ein Muster ist eine Zeichenfolge, die ein einzelnes Platzhalterzeichen enthält Karte die einer beliebigen Anzahl von Zeichen entsprechen können. Der erste % in einem Muster ist die Wild Karte und alle späteren % Zeichen werden als Literale behandelt. Eine % beliebige Stelle vor dem tatsächlichen Wild Karte kann mithilfe von \ Escapezeichen (d\%. s. als Literal %behandelt) werden. Alle\, die den Wilden entkommen würden Karte können mit einem anderen \ escapet werden (so \\% wird als Literal \ gefolgt von der Wild Karte behandelt). Um als Übereinstimmung betrachtet zu werden, müssen alle Eingabezeichen mit dem Muster abgeglichen werden; Partielle Übereinstimmungen werden nicht unterstützt.

Muster können mithilfe der filter Funktion veranschaulicht werden, wodurch nur Elemente beibehalten werden, die dem Muster entsprechen:

$(filter abc,abc) # Evaluates to "abc" - exactly matches
$(filter bc,abc) # Evaluates to "" - pattern "bc" only matches part of the item "abc"
$(filter %ef,abcdef) # Evaluates to "abcdef" - wildcard matches "abcd"
$(filter a%f,abcdef) # Evaluates to "abcdef" - wildcard matches "bcde"
$(filter %abc,abc) # Evaluates to "abc" - wildcard doesn't need to match any characters
$(filter a%c%d,abcd abc%d) # Evaluates to "abc%d" - only the first `%` is a wildcard, the rest are literals
$(filter a\%b%d,a%bcd) # Evaluates to "a%bcd" - `%` before the wildcard must be escaped with `\`
$(filter a\\%cd,a\bcd) # Evaluates to "a\bcd" - a `\` that would escape the wildcard must be escaped with another `\`
$(filter a%c\\%d,abc\\%d) # Evaluates to "abc\\%d" - any `\` after the wildcard isn't treated as an escape
$(filter \\a%f,\\abcdef) # Evaluates to "\\abcdef" - any `\\` that isn't directly before the wildcard isn't treated as an escape

Funktionen nach Kategorie

Funktion Zweck Unterstützt
Textfunktionen. Zweck Unterstützt
findstring, findstringi Überprüft, ob die Eingabe eine Zeichenfolge enthält. VS 2022 17.0
lowercase Konvertiert eine Zeichenfolge in Kleinbuchstaben. VS 2022 17.2
subst, substi Ersetzt alle Instanzen einer Zeichenfolge durch eine andere. VS 2022 17.0
uppercase Konvertiert eine Zeichenfolge in Großbuchstaben. VS 2022 17.2
Listenfunktionen Zweck Unterstützt
filter, filteri Behält Elemente in einer Liste bei, die mindestens einem Muster entsprechen. VS 2022 17.0
filterout, filterouti Behält Elemente in einer Liste bei, die keinem Muster entsprechen. VS 2022 17.0
patsubst, patsubsti Transformiert jedes Element, das einem Muster entspricht, elemente, die nicht übereinstimmen, bleiben gleich. VS 2022 17.1
strip Bereinigt das Leerzeichen in und um eine Liste von Elementen. VS 2022 17.0
Dateipfadfunktionen Zweck Unterstützt
abspath Ruft den absoluten Pfad für jedes Element in einer Liste ab. VS 2022 17.1
basename Ruft den Basisnamen für jedes Element in einer Liste ab. VS 2022 17.1

Siehe auch

Makros und NMAKE