Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Чтобы использовать макрос, заключите его имя в скобки, предшествующие знаку доллара ($
) следующим образом:
$(macro_name)
Пробелы в имени не допускаются. Скобки являются необязательными, если macro_name является одним символом. Строка определения заменяет; неопределенный макрос заменяется $(macro_name)
пустой строкой.
При вызове macro_name каждое вхождение string1 в строке определения заменяется строкой 2.
$(macro_name:string1=string2)
Подстановка макросов учитывает регистр и является литеральным; string1 и string2 не могут вызывать макросы. Подстановка не изменяет исходное определение. Вы можете заменить текст в любом предопределенном макросе, кроме $$@
.
Пробелы или вкладки не предшествуют двоеточию (:
); все пробелы или вкладки после двоеточия интерпретируются как литералы. Если строка2 имеет значение NULL, все вхождения string1 удаляются из строки определения макроса.
NMAKE предоставляет набор функций, которые можно использовать для изменения строк, списков элементов и путей к файлам. Эти функции доступны в NMAKE начиная с Visual Studio 2022.
Функции используют следующий синтаксис:
$(function_name arg0,arg1,arg2...)
Аргументы функции могут быть любой строкой и могут включать вложенные вызовы макросов. За исключением особых случаев, аргументы не могут быть null.
Любое дополнительное пробелы между именем функции и списком аргументов игнорируются. Если первый аргумент требует ведущего пробела, используйте макрос, содержащий необходимое пробелы:
SINGLESPACE=$(subst ',,' ') # Use "subst" since a normal assignment trims trailing whitespace.
$(subst $(SINGLESPACE)an,irec,red ant) # Evaluates to "redirect"
Запятые в списке аргументов всегда считаются разделителями аргументов и не могут быть экранированы. Если для любого аргумента требуется литеральная запятая, используйте макрос, содержащий запятую:
COMMA=,
INPUT=a, b
$(subst $(COMMA) , and ,$(INPUT)) # Evaluates to "a and b"
Некоторые функции поддерживают разделенный пробелами список элементов. Дополнительное пробелы игнорируются в начале списка, конце списка или между каждым элементом. Списки, созданные функцией, используют одно пространство между каждым элементом в качестве разделителя и не имеют начальных или конечных пробелов.
Например, простейшая функция списка — это strip
функция, которая принимает один аргумент списка и создает список с теми же элементами (но с пробелами, очищенными как описано выше):
$(strip a b c d ) # Evaluates to "a b c d"
Некоторые функции поддерживают использование шаблона. Шаблон — это строка, содержащая один подстановочный знак, который может соответствовать любому количеству символов. Первым %
в шаблоне является подстановочный знак, а все последующие %
символы рассматриваются как литералы. В %
любом месте до того, \%
как фактический подстановочный знак можно экранировать с помощью \
(т. е. рассматривается как литерал%
). Любой \
, который будет экранировать подстановочный знак, можно сбежать с другим \
(поэтому \\%
рассматривается как литерал \
, за которым следует подстановочный знак). Чтобы считаться совпадением, все входные символы должны соответствовать шаблону; частичные совпадения не поддерживаются.
Шаблоны можно продемонстрировать с помощью filter
функции, которая сохраняет только элементы, соответствующие шаблону:
$(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
Function | Характер использования | Поддерживается |
---|---|---|
Текстовые функции | Целевые назначения | Поддерживается |
findstring , findstringi |
Проверяет, содержит ли входные данные строку. | VS 2022 17.0 |
lowercase |
Преобразует строку в нижний регистр. | VS 2022 17.2 |
subst , substi |
Заменяет все экземпляры одной строки другой. | VS 2022 17.0 |
uppercase |
Преобразует строку в верхний регистр. | VS 2022 17.2 |
Перечисление функций | Целевые назначения | Поддерживается |
filter , filteri |
Хранит элементы в списке, который соответствует по крайней мере одному шаблону. | VS 2022 17.0 |
filterout , filterouti |
Хранит элементы в списке, который не соответствует ни одному шаблону. | VS 2022 17.0 |
patsubst , patsubsti |
Преобразует каждый элемент, соответствующий шаблону, элементы, которые не совпадают, остаются как есть. | VS 2022 17.1 |
strip |
Очищает пробелы в списке элементов и вокруг нее. | VS 2022 17.0 |
Функции пути к файлу | Целевые назначения | Поддерживается |
abspath |
Получает абсолютный путь для каждого элемента в списке. | VS 2022 17.1 |
basename |
Возвращает базовое имя для каждого элемента в списке. | VS 2022 17.1 |