В директивах !if и !elif возможно задание выражений; они используют синтаксис, присущий языку Cи. Выражение вычисляется как обычное 32-битовое целое со знаком.
Вы можете вводить числа как десятичные, восьмеричные или
шестнадцатиричные константы. Если вы знаете язык Си, то вы уже
знаете, как нужно задавать константы утилите MAKE: форматы одинаковы. Если вы программируете на ассемблере или на Турбо Паскале,
то рекомендуем вам внимательно проанализировать приведенные ниже
примеры. Ниже приводятся допустимые для утилиты MAKE константы:
| 4536 | # десятичная константа |
| 0677 | # восьмеричная константа (различается по начальному нулю) |
| 0x23aF | # шестнадцатиричная константа (различается по начальной последовательности 0x) |
В выражении может использоваться любой из представленных ниже знаков операций:
| Символы унарных операций: | |
| - | унарный минус |
| ~ | побитовое дополнение (инверсия всех битов) |
| ! | логическое отрицание NOT (0, если операнд ненулевой, 1 - в противном случае) |
| Символы бинарных операций: | |
| + | сложение |
| - | вычитание |
| * | умножение |
| / | деление |
| % | остаток |
| >> | сдвиг вправо |
| << | сдвиг влево |
| & | поразрядное И (AND) |
| | | поразрядное ИЛИ (OR) |
| ^ | поразрядное исключающее ИЛИ (XOR) |
| && | логическое И (AND) |
| логическое ИЛИ (OR) | |
| > | больше чем |
| " | меньше чем |
| >= | больше либо равно |
| "= | меньше или равно |
| == | равенство |
| != | неравенство |
| Символ тернарной операции: | |
| ?: | Операнд перед знаком ? рассматривается как тестовый. |
Символы операций имеют тот же самый приоритет, что и в языке
Си. Для группирования операндов в выражении можно использовать
круглые скобки. В отличие от языка Си утилита MAKE может сравнивать строки с помощью обычных операций ==, !=, <, >, >= и =>.
Числовые (например, + или *) операции со строками использовать
нельзя.
Строковые выражения могут содержать пробелы, но в этом случае их нужно заключать в кавычки:
Model = "Medium model"
.
.
.
!if $(Model) == "Medium model"
CFLAG = -mm
!elif $(Model) == "Large model"
CFLAG = -m1
!endif
Вы можете вызвать макрокоманды в выражении; будет распознаваться специальная макрокоманда $d(). После того, как произошло
расширение всех макрокоманд, синтаксис выражения должен соответствовать установленным требованиям.