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 strip
die einfachste Listenfunktion , die ein einzelnes Listenargument verwendet und eine Liste mit genau denselben Elementen erzeugt (aber mit dem Leerzeichen wie oben bereinigt):
$(strip a b c d ) # Evaluates to "a b c d"
Muster-Syntax
Einige Funktionen unterstützen die Verwendung eines Musters. Ein Muster ist eine Zeichenfolge, die einen einzelnen Platzhalter enthält, der mit einer beliebigen Anzahl von Zeichen übereinstimmen kann. Das erste %
in einem Muster ist der Wildcard, und alle späteren %
Zeichen werden als Literale behandelt. Eine %
beliebige Stelle vor dem tatsächlichen Wildcard kann mithilfe \
von Escapezeichen (d \%
. s. als Literal %
behandelt) werden. Jeder \
, der den Platzhalter escape würde, kann mit einem anderen \
escapet werden (wird also \\%
als Literal \
gefolgt vom Platzhalter 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. | Kostenträger | 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 | Kostenträger | 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 | Kostenträger | 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 |