Utiliser une macro NMAKE
Pour utiliser une macro, placez son nom entre parenthèses précédées d’un signe dollar ($
) comme suit :
$(macro_name)
Les espaces ne sont pas autorisés. Les parenthèses sont facultatives si macro_name est un caractère unique. La chaîne de définition remplace $(macro_name)
; une macro non définie est remplacée par une chaîne Null.
Substitution de macro
Lorsque macro_name est appelée, chaque occurrence de chaîne1 dans sa chaîne de définition est remplacée par string2.
$(macro_name:string1=string2)
La substitution de macro respecte la casse et est littérale ; string1 et string2 ne peuvent pas appeler des macros. La substitution ne modifie pas la définition d’origine. Vous pouvez remplacer du texte dans n’importe quelle macro prédéfinie, à l’exception $$@
de .
Aucun espace ou onglet ne précède le signe deux-points (:
) ; tous les espaces ou tabulations après le signe deux-points sont interprétés comme littéral. Si la chaîne2 est null, toutes les occurrences de string1 sont supprimées de la chaîne de définition de la macro.
Fonctions de macro
NMAKE fournit un ensemble de fonctions qui peuvent être utilisées pour modifier des chaînes, des listes d’éléments et des chemins d’accès aux fichiers. Ces fonctions sont disponibles dans NMAKE à partir de Visual Studio 2022.
Syntaxe de la fonction
Les fonctions utilisent la syntaxe suivante :
$(function_name arg0,arg1,arg2...)
Les arguments d’une fonction peuvent être n’importe quelle chaîne et peuvent inclure des appels de macro imbriqués. Sauf dans les cas spéciaux, les arguments ne peuvent pas être null.
Tout espace blanc supplémentaire entre le nom de la fonction et la liste d’arguments est ignoré. Si le premier argument nécessite un espace blanc de début, utilisez une macro qui contient l’espace blanc nécessaire :
SINGLESPACE=$(subst ',,' ') # Use "subst" since a normal assignment trims trailing whitespace.
$(subst $(SINGLESPACE)an,irec,red ant) # Evaluates to "redirect"
Les virgules dans une liste d’arguments sont toujours considérées comme des séparateurs d’arguments et ne peuvent pas être échappées. Si un argument nécessite une virgule littérale, utilisez une macro qui contient une virgule à la place :
COMMA=,
INPUT=a, b
$(subst $(COMMA) , and ,$(INPUT)) # Evaluates to "a and b"
Syntaxe de liste
Certaines fonctions prennent en charge une liste d’éléments séparés par des espaces blancs. Un espace blanc supplémentaire est ignoré au début de la liste, à la fin de la liste ou entre chaque élément. Les listes produites par une fonction utilisent un espace unique entre chaque élément comme séparateur et n’ont pas d’espace blanc de début ou de fin.
Par exemple, la fonction de liste la plus simple est strip
, qui prend un argument de liste unique et produit une liste avec exactement les mêmes éléments (mais avec l’espace blanc nettoyé comme ci-dessus) :
$(strip a b c d ) # Evaluates to "a b c d"
Syntaxe du modèle
Certaines fonctions prennent en charge l’utilisation d’un modèle. Un modèle est une chaîne qui contient un caractère générique unique qui peut correspondre à n’importe quel nombre de caractères. Le premier %
d’un modèle est le caractère générique, et tous les caractères ultérieurs %
sont traités comme des littéraux. N’importe %
où avant que le caractère générique réel puisse être échappé à l’aide \
(autrement dit, \%
est traité comme un littéral %
). Tout \
élément qui échapperait au caractère générique peut être échappé avec un autre \
( \\%
il est donc traité comme un littéral \
suivi du caractère générique). Pour être considéré comme une correspondance, tous les caractères d’entrée doivent être mis en correspondance par le modèle ; les correspondances partielles ne sont pas prises en charge.
Les modèles peuvent être démontrés à l’aide de la filter
fonction, qui conserve uniquement les éléments qui correspondent au modèle :
$(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
Fonctions par catégorie
Fonction | Objectif | Pris en charge |
---|---|---|
Fonctions de texte | Objectif | Pris en charge |
findstring , findstringi |
Vérifie si l’entrée contient une chaîne. | VS 2022 17.0 |
lowercase |
Convertit une chaîne en minuscules. | VS 2022 17.2 |
subst , substi |
Remplace toutes les instances d’une chaîne par une autre. | VS 2022 17.0 |
uppercase |
Convertit une chaîne en majuscules. | VS 2022 17.2 |
Fonctions de liste | Objectif | Pris en charge |
filter , filteri |
Conserve les éléments d’une liste qui correspondent au moins à un modèle. | VS 2022 17.0 |
filterout , filterouti |
Conserve les éléments d’une liste qui ne correspondent à aucun modèle. | VS 2022 17.0 |
patsubst , patsubsti |
Transforme chaque élément qui correspond à un modèle, les éléments qui ne correspondent pas sont laissés comme c’est le cas. | VS 2022 17.1 |
strip |
Nettoie l’espace blanc dans et autour d’une liste d’éléments. | VS 2022 17.0 |
Fonctions de chemin d’accès aux fichiers | Objectif | Pris en charge |
abspath |
Obtient le chemin absolu de chaque élément d’une liste. | VS 2022 17.1 |
basename |
Obtient le nom de base de chaque élément d’une liste. | VS 2022 17.1 |