Share via


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

Vedi anche

Macro e NMAKE