В директивах !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(). После того, как произошло
расширение всех макрокоманд, синтаксис выражения должен соответствовать установленным требованиям.