Usare una macro NMAKE
Per usare una macro, racchiuderne il nome tra parentesi precedute da un segno di dollaro ($
) come indicato di seguito:
$(macro_name)
Non sono consentiti spazi. Le parentesi sono facoltative se macro_name è un singolo carattere. La stringa di definizione sostituisce $(macro_name)
. Una macro non definita viene sostituita da una stringa Null.
Sostituzione di macro
Quando viene richiamato macro_name, ogni occorrenza di string1 nella stringa di definizione viene sostituita da string2.
$(macro_name:string1=string2)
La sostituzione delle macro fa distinzione tra maiuscole e minuscole ed è letterale; string1 e string2 non possono richiamare macro. La sostituzione non modifica la definizione originale. È possibile sostituire il testo in qualsiasi macro predefinita, ad eccezione $$@
di .
Nessuna spazi o tabulazioni precede i due punti (:
); gli spazi o le schede dopo i due punti vengono interpretati come letterali. Se string2 è null, tutte le occorrenze di string1 vengono eliminate dalla stringa di definizione della macro.
Funzioni macro
NMAKE fornisce un set di funzioni che possono essere usate per modificare stringhe, elenchi di elementi e percorsi di file. Queste funzioni sono disponibili in NMAKE a partire da Visual Studio 2022.
Sintassi della funzione
Le funzioni usano la sintassi seguente:
$(function_name arg0,arg1,arg2...)
Gli argomenti di una funzione possono essere qualsiasi stringa e possono includere chiamate di macro annidate. Ad eccezione di casi speciali, gli argomenti non possono essere Null.
Qualsiasi spazio vuoto aggiuntivo tra il nome della funzione e l'elenco di argomenti viene ignorato. Se il primo argomento richiede spazi vuoti iniziali, usare una macro contenente gli spazi vuoti necessari:
SINGLESPACE=$(subst ',,' ') # Use "subst" since a normal assignment trims trailing whitespace.
$(subst $(SINGLESPACE)an,irec,red ant) # Evaluates to "redirect"
Le virgole all'interno di un elenco di argomenti sono sempre considerate separatori di argomenti e non possono essere precedute da caratteri di escape. Se un argomento richiede una virgola letterale, usare invece una macro contenente una virgola:
COMMA=,
INPUT=a, b
$(subst $(COMMA) , and ,$(INPUT)) # Evaluates to "a and b"
Sintassi elenco
Alcune funzioni supportano un elenco di elementi separati da spazi vuoti. Gli spazi vuoti aggiuntivi vengono ignorati all'inizio dell'elenco, alla fine dell'elenco o tra ogni elemento. Gli elenchi prodotti da una funzione usano un singolo spazio tra ogni elemento come separatore e non hanno spazi vuoti iniziali o finali.
Ad esempio, la funzione list più semplice è strip
, che accetta un singolo argomento elenco e produce un elenco con gli stessi elementi (ma con lo spazio vuoto pulito come sopra):
$(strip a b c d ) # Evaluates to "a b c d"
Sintassi dei criteri
Alcune funzioni supportano l'uso di un modello. Un criterio è una stringa che contiene un singolo carattere jolly che può corrispondere a un numero qualsiasi di caratteri. Il primo %
in un criterio è il carattere jolly e gli eventuali caratteri successivi %
vengono considerati come valori letterali. Un %
oggetto ovunque prima che il carattere jolly effettivo possa essere preceduto da un carattere di escape usando \
(ovvero, \%
viene considerato come un valore letterale %
). Qualsiasi \
carattere di escape per il carattere jolly può essere preceduto da un altro \
carattere di escape ( quindi \\%
viene considerato come un valore letterale \
seguito dal carattere jolly). Per essere considerato una corrispondenza, tutti i caratteri di input devono essere corrispondenti al modello; le corrispondenze parziali non sono supportate.
I modelli possono essere illustrati usando la filter
funzione , che mantiene solo gli elementi che corrispondono al modello:
$(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
Funzioni per categoria
Funzione | Scopo | Supportata |
---|---|---|
Funzioni di testo | Scopo | Supportata |
findstring , findstringi |
Controlla se l'input contiene una stringa. | VS 2022 17.0 |
lowercase |
Converte una stringa in lettere minuscole. | VS 2022 17.2 |
subst , substi |
Sostituisce tutte le istanze di una stringa con un'altra. | VS 2022 17.0 |
uppercase |
Converte una stringa in lettere maiuscole. | VS 2022 17.2 |
Funzioni di elenco | Scopo | Supportata |
filter , filteri |
Mantiene gli elementi in un elenco che corrispondono ad almeno un criterio. | VS 2022 17.0 |
filterout , filterouti |
Mantiene gli elementi in un elenco che non corrispondono ad alcun modello. | VS 2022 17.0 |
patsubst , patsubsti |
Trasforma ogni elemento che corrisponde a un criterio, gli elementi che non corrispondono vengono lasciati così come sono. | VS 2022 17.1 |
strip |
Pulisce gli spazi vuoti in e intorno a un elenco di elementi. | VS 2022 17.0 |
Funzioni percorso file | Scopo | Supportata |
abspath |
Ottiene il percorso assoluto per ogni elemento di un elenco. | VS 2022 17.1 |
basename |
Ottiene il nome di base per ogni elemento di un elenco. | VS 2022 17.1 |