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 strip
napří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 |