Używanie makra NMAKE

Aby użyć makra, należy ująć jego nazwę w nawiasy poprzedzone znakiem dolara ($) w następujący sposób:

$(macro_name)

Spacje nie są dozwolone. Nawiasy są opcjonalne, jeśli macro_name jest pojedynczym znakiem. Ciąg definicji zastępuje $(macro_name); niezdefiniowane makro jest zastępowane ciągiem o wartości null.

Podstawianie makr

Po wywołaniu macro_name każde wystąpienie ciągu string1 w ciągu definicji jest zastępowane ciągiem string2.

$(macro_name:string1=string2)

Podstawianie makr jest uwzględniane w wielkości liter i jest literałem; string1 i string2 nie mogą wywoływać makr. Podstawianie nie modyfikuje oryginalnej definicji. Tekst można zamienić w dowolnym wstępnie zdefiniowanym makrze z wyjątkiem $$@.

Żadne spacje ani tabulatory nie poprzedzają dwukropka (:); spacje lub karty po dwukropku są interpretowane jako literał. Jeśli ciąg2 ma wartość null, wszystkie wystąpienia ciągu string1 zostaną usunięte z ciągu definicji makra.

Funkcje makr

NMAKE udostępnia zestaw funkcji, które mogą służyć do modyfikowania ciągów, list elementów i ścieżek plików. Te funkcje są dostępne w narzędziu NMAKE, począwszy od programu Visual Studio 2022.

Składnia funkcji

Funkcje używają następującej składni:

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

Argumenty funkcji mogą być dowolnym ciągiem i mogą zawierać wywołania makr zagnieżdżonych. Z wyjątkiem przypadków specjalnych argumenty nie mogą mieć wartości null.

Wszelkie dodatkowe odstępy między nazwą funkcji a listą argumentów są ignorowane. Jeśli pierwszy argument wymaga wiodącego odstępu, użyj makra zawierającego wymagane białe znaki:

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

Przecinki na liście argumentów są zawsze traktowane jako separatory argumentów i nie można ich uniknąć. Jeśli jakikolwiek argument wymaga przecinka literału, użyj makra zawierającego przecinek:

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

Składnia listy

Niektóre funkcje obsługują rozdzielaną odstępami listę elementów. Dodatkowe odstępy są ignorowane na początku listy, na końcu listy lub między poszczególnymi elementami. Listy generowane przez funkcję używają pojedynczego odstępu między poszczególnymi elementami jako separatora i nie mają wiodących ani końcowych białych znaków.

Na przykład najprostszą funkcją listy jest strip, która przyjmuje jeden argument listy i tworzy listę z dokładnie tymi samymi elementami (ale z białym znakiem oczyszczonym jak powyżej):

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

Składnia wzorca

Niektóre funkcje obsługują używanie wzorca. Wzorzec to ciąg zawierający pojedynczy symbol wieloznaczny, który może być zgodny z dowolną liczbą znaków. Pierwszy % we wzorcu to symbol wieloznaczny, a wszystkie późniejsze % znaki są traktowane jako literały. Symbol % wieloznaczny \ w dowolnym miejscu przed użyciem rzeczywistego symbolu wieloznakowego (czyli \% jest traktowany jako literał %). Każdy \ , który uniknąłby symbolu wieloznakowego, może zostać uniknięty innym \ (więc \\% jest traktowany jako literał \ , po którym następuje symbol wieloznaczny). Aby można je było traktować jako dopasowanie, wszystkie znaki wejściowe muszą być zgodne ze wzorcem; częściowe dopasowania nie są obsługiwane.

Wzorce można zademonstrować przy użyciu filter funkcji , która przechowuje tylko elementy zgodne ze wzorcem:

$(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

Funkcje według kategorii

Function Cel Nieobsługiwane
Funkcje tekstowe Przeznaczenie Obsługiwane
findstring, findstringi Sprawdza, czy dane wejściowe zawierają ciąg. VS 2022 17.0
lowercase Konwertuje ciąg na małe litery. VS 2022 17.2
subst, substi Zastępuje wszystkie wystąpienia jednego ciągu innym. VS 2022 17.0
uppercase Konwertuje ciąg na wielkie litery. VS 2022 17.2
Funkcje listy Przeznaczenie Obsługiwane
filter, filteri Przechowuje elementy na liście zgodne z co najmniej jednym wzorcem. VS 2022 17.0
filterout, filterouti Przechowuje elementy na liście, które nie pasują do żadnych wzorców. VS 2022 17.0
patsubst, patsubsti Przekształca każdy element, który pasuje do wzorca, elementy, które nie są zgodne, są pozostawione w taki sposób, jak jest. VS 2022 17.1
strip Czyści biały znak w i wokół listy elementów. VS 2022 17.0
Funkcje ścieżki pliku Przeznaczenie Obsługiwane
abspath Pobiera ścieżkę bezwzględną dla każdego elementu na liście. VS 2022 17.1
basename Pobiera nazwę podstawową dla każdego elementu na liście. VS 2022 17.1

Zobacz też

Makra i NMAKE