Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете управлять сеансом NMAKE с помощью директив и выражений предварительной обработки. Инструкции по предварительной обработке можно поместить в файл makefile или в Tools.ini. С помощью директив можно условно обработать файл makefile, отобразить сообщения об ошибках, включить другие файлы makefile, отменить макрос и включить или отключить определенные параметры.
Директивы предварительной обработки файла makefile
Директивы предварительной обработки не учитывает регистр. Начальная восклицательный знак (!) должна отображаться в начале строки. Ноль или несколько пробелов или вкладок могут отображаться после восклицательного знака для отступа.
!CMDSWITCHES{+option option-| } ...Включает или отключает каждый указанный параметр . Пробелы или вкладки должны отображаться перед оператором или
-оператором+. Пробелы не могут отображаться между оператором и буквами параметров. Буквы не учитывает регистр и указываются без косой черты (/). Чтобы включить некоторые параметры и отключить другие, используйте отдельные спецификации!CMDSWITCHES.Только
/D,/I/Nи/Sможет использоваться в файле makefile. ВоTools.iniвсех параметрах разрешены, кроме/F,/HELP,/NOLOGO,/Xи/?. Изменения, указанные в блоке описания, не вступают в силу до следующего блока описания. Эта директива обновляетсяMAKEFLAGS; изменения наследуются во время рекурсии, еслиMAKEFLAGSзадано.!ERRORСМСОтображает текст в ошибке U1050, а затем останавливает NMAKE, даже если
/I!CMDSWITCHES/K.IGNOREиспользуется модификатор тире или тире ().-Пробелы или вкладки перед тем, как текст игнорируется.!MESSAGEСМСОтображает текст в стандартные выходные данные. Пробелы или вкладки перед тем, как текст игнорируется.
!INCLUDE[ ]<имя файла [ ]>Считывает имя файла в виде файла makefile, а затем продолжается с текущим файлом makefile. NMAKE сначала ищет имя файла в указанном или текущем каталоге, а затем рекурсивно через каталоги любого родительского файла makefile, а затем, если имя файла заключено угловыми скобками (
< >), в каталогах, указанных макросом, которое изначально задаетсяINCLUDEпеременнойINCLUDEсреды. Полезно передать.SUFFIXESпараметры и.PRECIOUSправила вывода для рекурсивных файлов makefile.!IFconstant_expressionОбрабатывает операторы между
!IFи следующими!ELSEили!ENDIFесли constant_expression оценивается как ненулевое значение.!IFDEFmacro_nameОбрабатывает операторы между
!IFDEFи следующими!ELSEили!ENDIFесли macro_name определены. Макрос NULL считается определенным.!IFNDEFmacro_nameОбрабатывает операторы между
!IFNDEFи следующими!ELSEили!ENDIFесли macro_name не определены.!ELSE[IFconstant_expression macro_name | |IFDEFIFNDEFmacro_name ]Обрабатывает операторы между
!ELSEи следующими!ENDIF, если предыдущий!IFDEF!IFоператор или!IFNDEFоператор оценивается до нуля. Необязательные ключевые слова дают дополнительный контроль над предварительной обработкой.!ELSEIFЯвляется синонимом элемента
!ELSE IF!ELSEIFDEFЯвляется синонимом элемента
!ELSE IFDEF!ELSEIFNDEFЯвляется синонимом элемента
!ELSE IFNDEF!ENDIFПомечает конец
!IFили!IFDEF!IFNDEFблок. Любой текст после!ENDIFтого же строки игнорируется.!UNDEFmacro_nameНе определено macro_name.
Выражения в предобработке файлов makefile
Или !IF !ELSE IF constant_expression состоят из целых констант (в нотации десятичного или C-языка), строковых констант или команд. Используйте скобки для группирования выражений. Выражения используют арифметические целочисленные строки C; числа находятся в 32-разрядной двухфакторной форме в диапазоне -2147483648 до 2147483647.
Выражения могут использовать операторы, которые действуют на константных значениях, коды выхода из команд, строк, макросов и путей к файловой системе.
Операторы предварительной обработки файлов makefile
В выражениях предварительной обработки файлов makefile могут использоваться операторы, выполняющие действия с константными значениями, кодами завершения команд, строками, макросами и путями файловой системы. Чтобы оценить выражение, препроцессор сначала развертывает макросы, а затем выполняет команды, а затем выполняет операции. Он оценивает операции в порядке явной группировки в скобках, а затем в порядке приоритета оператора. Результатом является константное значение.
Оператор DEFINED является логическим оператором, который действует в имени макроса. Выражение DEFINED( macro_name ) имеет значение true, если macro_name определен, даже если оно не имеет назначенного значения. DEFINED в сочетании с !IF или !ELSE IF эквивалентен или эквивалентен !IFDEF или !ELSE IFDEF. Однако в отличие от этих директив, DEFINED можно использовать в сложных выражениях.
Оператор EXIST является логическим оператором, который действует на пути к файловой системе. EXIST( path ) значение true, если путь существует. Результат EXIST можно использовать в двоичных выражениях. Если путь содержит пробелы, заключите его в двойные кавычки.
Чтобы сравнить две строки, используйте оператор равенства (==) или оператор неравенства (!=). Строки заключаются в двойные кавычки.
Целые константы могут использовать унарные операторы для числового отрицания (-), дополнения одного (~) и логического отрицания (!).
В выражениях могут использоваться следующие операторы. Операторы с одинаковым приоритетом объединяются в группы, которые перечисляются в порядке убывания приоритета. Унарные операторы связываются с операндом справа. Бинарные операторы одинакового приоритета связывают операнды слева направо.
| Operator | Description |
|---|---|
DEFINED( macro_name ) |
Создает логическое значение для текущего состояния определения macro_name. |
EXIST(путь ) |
Создает логическое значение для существования файла по пути. |
! |
Унарное логическое НЕ. |
~ |
Унарное дополнение. |
- |
Унарное отрицание. |
* |
Умножение. |
/ |
Деление. |
% |
Модуль (остаток от деления). |
+ |
Сложение. |
- |
Вычитание. |
<< |
Побитовое смещение влево. |
>> |
Побитовое смещение вправо. |
<= |
Меньше или равно. |
>= |
Больше или равно. |
< |
Меньше. |
> |
Больше чем. |
== |
Равенство. |
!= |
Неравенство. |
& |
Битовый AND. |
^ |
Битовый XOR. |
| |
Битовый OR. |
&& |
Логический оператор AND. |
|| |
Логический оператор OR. |
Примечание.
Побитовый оператор XOR (^) совпадает с символом escape- и должен быть экранирован (как ^^) при использовании в выражении.
Выполнение программ в ходе предварительной обработки
Чтобы использовать код выхода команды во время предварительной обработки, укажите команду с любыми аргументами в скобках ([ ]). Все макросы развертываются перед выполнением команды. NMAKE заменяет спецификацию команды кодом выхода команды, который можно использовать в выражении для управления предварительной обработкой.
Пример
!IF [my_command.exe arg1 arg2] != 0
!MESSAGE my_command.exe failed!
!ENDIF