Compartir a través de


Uso de una macro NMAKE

Para usar una macro, incluya el nombre entre paréntesis precedido por un signo de dólar ($) como se indica a continuación:

$(macro_name)

No se permiten espacios. Los paréntesis son opcionales si macro_name es de solo un carácter. La cadena de definición reemplaza $(macro_name); una macro sin definir se reemplaza por una cadena nula.

Sustitución de macros

Cuando se invoca macro_name, cada aparición de string1 en la cadena de definición se reemplaza por string2.

$(macro_name:string1=string2)

La sustitución de macros distingue mayúsculas de minúsculas y es literal; string1 y string2 no pueden invocar macros. La sustitución no cambia la definición original. Puede reemplazar el texto en cualquier macro predefinida excepto en$$@.

Ningún espacio o tabulación precede a los dos puntos (:); cualquier espacio o tabulación después de los dos puntos se interpreta como literal. Si string2 es null, todas las apariciones de string1 se eliminan de la cadena de definición de la macro.

Funciones de macro

NMAKE ofrece un conjunto de funciones que se pueden usar para modificar cadenas, listas de elementos y rutas de acceso a archivos. Estas funciones están disponibles en NMAKE a partir de Visual Studio 2022.

Sintaxis de la función

Las funciones usan la sintaxis siguiente:

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

Los argumentos de una función pueden ser cualquier cadena e incluir también invocaciones de macro anidadas. Excepto en casos especiales, los argumentos no pueden ser null.

Se omite cualquier espacio en blanco extra entre el nombre de la función y la lista de argumentos. Si el primer argumento requiere espacio en blanco interlineado, use una macro que contenga el espacio en blanco necesario:

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

Las comas de una lista de argumentos se consideran siempre separadores de argumentos y no pueden escaparse. Si algún argumento requiere una coma literal, use para ello una macro que la contenga:

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

Sintaxis de lista

Algunas funciones admiten una lista de elementos separada por espacios en blanco. Los espacios en blanco adicionales se omiten al principio de la lista, al final de la lista o entre cada elemento. Las listas generadas por una función usan un único espacio entre cada elemento como separador y no tienen ningún espacio en blanco inicial o final.

Por ejemplo, la función de lista más sencilla es strip, que asume un único argumento de lista y genera una con los mismos elementos (pero con el espacio en blanco limpiado como en el caso anterior):

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

Sintaxis del patrón

Algunas funciones admiten el uso de un patrón. Un patrón es una cadena que contiene un único carácter comodín que puede coincidir con cualquier número de caracteres. El primer % de un patrón es el carácter comodín y los caracteres posteriores % se tratan como literales. Un % en cualquier lugar antes del carácter comodín real se puede escapar mediante \ (es decir, \% se trata como un literal %). Cualquier \ que escape al carácter comodín se puede escapar con otro \ (por lo que \\% se trata como un literal \ seguido del carácter comodín). Para que se considere una coincidencia, todos los caracteres de entrada deben coincidir con el patrón; no se admiten coincidencias parciales.

Los patrones se pueden demostrar mediante la función filter, que solo mantiene los elementos que coinciden con el patrón:

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

Funciones por categoría

Función Fin Compatible
Funciones de texto Propósito Compatible
findstring, findstringi Comprueba si la entrada contiene una cadena. VS 2022 17.0
lowercase Convierte una cadena a minúsculas. VS 2022 17.2
subst, substi Reemplaza todas las instancias de una cadena por otra. VS 2022 17.0
uppercase Convierte una cadena a mayúsculas. VS 2022 17.2
Funciones de lista Propósito Compatible
filter, filteri Mantiene una lista los elementos que coinciden con al menos un patrón. VS 2022 17.0
filterout, filterouti Mantiene una lista los elementos que no coinciden con al menos un patrón. VS 2022 17.0
patsubst, patsubsti Transforma cada elemento que coincide con un patrón. Los elementos que no coinciden se dejan como están. VS 2022 17.1
strip Limpia los espacios en blanco dentro y alrededor de una lista de elementos. VS 2022 17.0
Funciones de la ruta de acceso del archivo Propósito Compatible
abspath Obtiene la ruta de acceso absoluta de cada elemento de una lista. VS 2022 17.1
basename Obtiene el nombre base de cada elemento de una lista. VS 2022 17.1

Consulte también

Macros y NMAKE