Поделиться через


Предварительная обработка файла makefile

Вы можете управлять сеансом 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[ IF constant_expression macro_name | | IFDEF IFNDEF macro_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

См. также

Справочник по NMAKE