Специальные макросы NMAKE
NMAKE предоставляет несколько специальных макросов для представления различных имен файлов и команд. Одно из этих макросов используется в предопределенных правилах вывода. Как и все макросы, макросы, предоставляемые NMAKE, чувствительны к регистру.
Макрос имени файла
Макросы имени файла предопределяются как имена файлов, указанные в зависимости (не полные спецификации имени файла на диске). Эти макросы не должны быть заключены в скобки при вызове; укажите только $
, как показано ниже.
Макрос | Значение |
---|---|
$@ |
Полное имя текущего целевого объекта (путь, базовое имя, расширение), как указано в данный момент. |
$$@ |
Полное имя текущего целевого объекта (путь, базовое имя, расширение), как указано в данный момент. Допустимо только в качестве зависимого в зависимости. |
$* |
Путь к текущему целевому объекту и базовое имя минус расширение файла. |
$** |
Все зависимые от текущего целевого объекта. |
$? |
Все зависимые от более поздней метки времени, чем текущий целевой объект. |
$< |
Зависимый файл с последующей меткой времени, чем текущий целевой объект. Допустимы только в командах в правилах вывода. |
Чтобы указать часть предопределенного макроса имени файла, добавьте модификатор макроса и заключите измененный макрос в скобки.
Модификатор | Результирующая часть имени файла |
---|---|
D |
Каталог "Диск плюс" |
B |
Базовое имя |
F |
Базовое имя плюс расширение |
R |
Диск плюс каталог плюс базовое имя |
Макросы рекурсии
Используйте макросы рекурсии для вызова NMAKE рекурсивно. Рекурсивные сеансы наследуют макросы и макросы Tools.ini
переменных среды и среды. Они не наследуют правила вывода и .SUFFIXES
.PRECIOUS
спецификации, определенные в файле makefile. Существует три способа передачи макросов рекурсивному сеансу NMAKE:
- Задайте переменную среды с
SET
помощью команды перед рекурсивным вызовом. - Определите макрос в команде для рекурсивного вызова.
- Или определите макрос в
Tools.ini
.
Макрос | Определение |
---|---|
MAKE |
Команда, используемая первоначально для вызова NMAKE. Макрос $(MAKE) предоставляет полный путь.nmake.exe |
MAKEDIR |
Текущий каталог при вызове NMAKE. |
MAKEFLAGS |
Параметры, действующие в настоящее время. Используйте как /$(MAKEFLAGS) . Параметр /F не включен. |
Макросы команд и параметров
Макросы команд предопределяются для продуктов Майкрософт. Макросы параметров представляют параметры этих продуктов и не определены по умолчанию. Оба используются в предопределенных правилах вывода и могут использоваться в блоках описания или в определяемых пользователем правилах вывода. Макросы команд можно переопределять для представления части или всей командной строки, включая параметры. Макросы параметров создают строку NULL, если слева не определено.
Средство | Макрос команды | Определяется как | Макрос параметров |
---|---|---|---|
Сборщик макросов | AS |
ml или ml64 |
AFLAGS |
Компилятор C | CC |
cl |
CFLAGS |
Компилятор C++ | CPP |
cl |
CPPFLAGS |
Компилятор C++ | CXX |
cl |
CXXFLAGS |
компилятор ресурсов | RC |
rc |
RFLAGS |
Макросы переменных среды
NMAKE наследует определения макросов для переменных среды, которые существуют до начала сеанса. Если переменная была задана в среде операционной системы, она доступна как макрос NMAKE. Унаследованные имена преобразуются в верхний регистр. Наследование происходит перед предварительной обработкой. Используйте параметр /E, чтобы вызвать макросы, унаследованные от переменных среды, чтобы переопределить все макросы с тем же именем в файле makefile.
Макросы переменных среды можно переопределять в сеансе, и это изменяет соответствующую переменную среды. Можно также изменить переменные среды с помощью команды SET. Команда SET для изменения переменной среды в сеансе не изменяет соответствующий макрос.
Например:
PATH=$(PATH);\nonesuch
all:
echo %%PATH%%
В этом примере изменение PATH
изменяет соответствующую переменную PATH
среды; она добавляется \nonesuch
к пути.
Если переменная среды определена как строка, которая будет синтаксически неверной в файле makefile, макрос не создается и не создается предупреждение. Если значение переменной содержит знак доллара ($), NMAKE интерпретирует его как начало вызова макроса. Использование макроса может вызвать непредвиденное поведение.