Sdílet prostřednictvím


Použití makra NMAKE

Chcete-li použít makro, uzavřete jeho název do závorek před znakem dolaru ($) následujícím způsobem:

$(macro_name)

Nejsou povoleny žádné mezery. Závorky jsou volitelné, pokud macro_name je jeden znak. Řetězec definice nahrazuje $(macro_name); nedefinované makro je nahrazeno řetězcem null.

Nahrazení makra

Při vyvolání macro_name se každý výskyt řetězce1 v řetězci definice nahradí řetězcem 2.

$(macro_name:string1=string2)

Nahrazování makra se rozlišují malá a velká písmena a je literál; string1 a string2 nemůžou vyvolat makra. Nahrazení nezmění původní definici. Text můžete nahradit v jakémkoli předdefinovaném makre s výjimkou $$@.

Žádné mezery nebo tabulátory před dvojtečku (:); žádné mezery nebo tabulátory po dvojtečku se interpretují jako literál. Pokud má řetězec2 hodnotu null, odstraní se všechny výskyty řetězce string1 z definičního řetězce makra.

Funkce maker

NMAKE poskytuje sadu funkcí, které lze použít k úpravě řetězců, seznamů položek a cest k souborům. Tyto funkce jsou dostupné v nástroji NMAKE počínaje sadou Visual Studio 2022.

Syntaxe funkce

Funkce používají následující syntaxi:

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

Argumenty funkce můžou být libovolný řetězec a mohou obsahovat vnořené vyvolání makra. S výjimkou speciálních případů nemohou být argumenty null.

Všechny nadbytečné prázdné znaky mezi názvem funkce a seznamem argumentů se ignorují. Pokud první argument vyžaduje úvodní prázdné znaky, použijte makro, které obsahuje potřebné prázdné znaky:

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

Čárky v seznamu argumentů se vždy považují za oddělovače argumentů a nedají se utéct. Pokud některý z argumentů vyžaduje literálovou čárku, použijte místo toho makro obsahující čárku:

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

Syntaxe seznamu

Některé funkce podporují prázdný seznam položek oddělených mezerami. Nadbytečné prázdné znaky se ignorují na začátku seznamu, na konci seznamu nebo mezi jednotlivými položkami. Seznamy vytvořené funkcí používají jednu mezeru mezi jednotlivými položkami jako oddělovače a nemají úvodní ani koncové prázdné znaky.

Nejjednodušší funkce seznamu je stripnapříklad , která přebírá jeden argument seznamu a vytváří seznam se stejnými položkami (ale s prázdnými znaky vyčištěnými jako výše):

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

Syntaxe vzoru

Některé funkce podporují použití vzoru. Vzor je řetězec, který obsahuje jeden zástupný znak, který může odpovídat libovolnému počtu znaků. První % ze vzorů je zástupný znak a všechny pozdější % znaky se považují za literály. Místo % před skutečným zástupným znakem lze utéct pomocí ( \ to znamená, \% že se považuje za literál %). Všechny \ , které by unikly zástupným znakem, mohou být uchvácené jiným \ znakem (proto \\% se považuje za literál \ následovaný zástupným znakem). Aby bylo možné považovat za shodu, musí se všechny vstupní znaky shodovat se vzorem; částečné shody nejsou podporovány.

Vzory lze demonstrovat pomocí filter funkce, která uchovává pouze položky, které odpovídají vzoru:

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

Funkce podle kategorie

Function Účel Podporováno
Textové funkce Účel Podporuje se
findstring, findstringi Zkontroluje, jestli vstup obsahuje řetězec. VS 2022 17.0
lowercase Převede řetězec na malá písmena. VS 2022 17.2
subst, substi Nahradí všechny instance jednoho řetězce jiným. VS 2022 17.0
uppercase Převede řetězec na velká písmena. VS 2022 17.2
Funkce seznamu Účel Podporuje se
filter, filteri Uchovává položky v seznamu, který odpovídá alespoň jednomu vzoru. VS 2022 17.0
filterout, filterouti Uchovává položky v seznamu, které neodpovídají žádným vzorům. VS 2022 17.0
patsubst, patsubsti Transformuje každou položku, která odpovídá vzoru, položky, které se neshodují, zůstanou tak, jak jsou. VS 2022 17.1
strip Vyčistí prázdné znaky v seznamu položek a kolem. VS 2022 17.0
Funkce cest k souborům Účel Podporuje se
abspath Získá absolutní cestu pro každou položku v seznamu. VS 2022 17.1
basename Získá základní název pro každou položku v seznamu. VS 2022 17.1

Viz také

Makra a příkaz NMAKE