Partilhar via


Usar uma macro do NMAKE

Para usar uma macro, coloque seu nome entre parênteses precedido por um sinal de dólar ($) da seguinte maneira:

$(macro_name)

Espaços não são permitidos. Os parênteses serão opcionais se macro_name for um único caractere. A cadeia de caracteres de definição substitui $(macro_name); uma macro indefinida é substituída por uma cadeia de caracteres nula.

Substituição de macro

Quando macro_name é invocado, cada ocorrência de string1 em sua cadeia de caracteres de definição é substituída por string2.

$(macro_name:string1=string2)

A substituição de macro diferencia maiúsculas de minúsculas e é literal; string1 e string2 não podem invocar macros. A substituição não modifica a definição original. Você pode substituir o texto em qualquer macro predefinida, exceto $$@.

Nenhum espaço ou guia precede os dois-pontos (:); espaços ou guias após os dois-pontos são interpretados como literais. Se string2 for nulo, todas as ocorrências de string1 serão excluídas da cadeia de caracteres de definição da macro.

Funções de macro

O NMAKE fornece um conjunto de funções que podem ser usadas para modificar cadeias de caracteres, listas de itens e caminhos de arquivo. Essas funções estão disponíveis no NMAKE a partir do Visual Studio 2022.

Sintaxe de função

As funções usam a sintaxe a seguir:

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

Os argumentos para uma função podem ser qualquer cadeia de caracteres e podem incluir invocações de macro aninhadas. Exceto em casos especiais, os argumentos não podem ser nulos.

Qualquer espaço em branco extra entre o nome da função e a lista de argumentos é ignorado. Se o primeiro argumento exigir espaço em branco à esquerda, use uma macro que contenha o espaço em branco necessário:

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

Vírgulas dentro de uma lista de argumentos são sempre consideradas separadores de argumentos e não podem ser escapadas. Se algum argumento exigir uma vírgula literal, use uma macro que contenha uma vírgula:

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

Sintaxe de lista

Algumas funções dão suporte a uma lista de itens separados por espaço em branco. O espaço em branco extra é ignorado no início da lista, no final da lista ou entre cada item. As listas produzidas por uma função usam um único espaço entre cada item como separador e não têm espaço em branco à esquerda ou à direita.

Por exemplo, a função de lista mais simples é strip, que usa um argumento de lista única e produz uma lista com exatamente os mesmos itens (mas com o espaço em branco limpo como acima):

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

Sintaxe de padrões

Algumas funções dão suporte ao uso de um padrão. Um padrão é uma cadeia de caracteres que contém um único curinga que pode corresponder a qualquer número de caracteres. O primeiro % em um padrão é o curinga, e os caracteres posteriores % são tratados como literais. Um % em qualquer lugar antes do curinga real pode ser escapado usando \ (ou seja, \% é tratado como um literal %). Qualquer \ que escape do curinga pode ser escapado com outro \ (portanto, \\% é tratado como um literal \ seguido pelo curinga). Para ser considerada uma correspondência, todos os caracteres de entrada devem ser correspondidos pelo padrão; não há suporte para correspondências parciais.

Os padrões podem ser demonstrados usando a função filter, que mantém apenas os itens que correspondem ao padrão:

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

Funções por categoria

Função Finalidade Com suporte
Funções de texto Finalidade Com suporte
findstring, findstringi Verifica se a entrada contém uma cadeia de caracteres. VS 2022 17.0
lowercase Converte uma cadeia de caracteres em letras minúsculas. VS 2022 17.2
subst, substi Substitui todas as instâncias de uma cadeia de caracteres por outra. VS 2022 17.0
uppercase Converte uma cadeia de caracteres em letras maiúsculas. VS 2022 17.2
Funções de lista Finalidade Com suporte
filter, filteri Mantém os itens em uma lista que correspondem a pelo menos um padrão. VS 2022 17.0
filterout, filterouti Mantém os itens em uma lista que não correspondem a nenhum padrão. VS 2022 17.0
patsubst, patsubsti Transforma cada item que corresponde a um padrão, os itens que não correspondem são deixados como estão. VS 2022 17.1
strip Limpa o espaço em branco dentro e ao redor de uma lista de itens. VS 2022 17.0
Funções de caminho da ATL Finalidade Com suporte
abspath Obtém o caminho absoluto para cada item em uma lista. VS 2022 17.1
basename Obtém o nome de base de cada item em uma lista. VS 2022 17.1

Confira também

Macros e NMAKE