9.7.4 Параметры макросов

Большая часть макросов может выполнять простые текстовые подстановки. Также макросу можно передать параметры, и получить доступ к их значениям, подобно тому, как это происходит в shell.

Для передачи параметров обычное определение расширяется следующим образом:

%define macro_name(options) value

Любой текст в круглых скобках передается getopt(3) и выступает в качестве параметра для макроса. Кроме того, можно передать параметры макросу, если используется способ определения без фигурных скобок. Например:

%foo 1 2 3

Этот пример передает параметры 1, 2 и 3 макросу foo. Внутри макроса вы можете использовать shell-подобный синтаксис для доступа к параметрам через специальные макросы. В таблице показаны такие макросы.

Макрос

Содержит

%0

Имя макроса

%*

Все параметры

%#

Число параметров

%1

Первый параметр

%2

Второй параметр

%3

Третий параметр и так далее

%{-p}

Содержит -p, если параметр -p был передан макросу, в противном случае не содержит ничего

%{-p*}

Содержит значение, переданное с параметром -p, если параметр был передан макросу, в противном случае не содержит ничего

%{-p:text}

Содержит text, если параметр -p был передан макросу, в противном случае не содержит ничего

Специальные макросы из этой таблицы будут содержать свои значения только после того, как отработает процесс getopt(3). Эти макросы можно использовать в определениях своих макросов. Также можно вкладывать макросы один в другой, как показано в примере:

%define mypatch() patch %{-p:-p%{-p*}}

Этот макрос раскроется в команду patch в том случае, если параметр -p не будет передан макросу. Если параметр будет передан, например -p 1, тогда макрос раскроется в patch -p1 .
Этот тип синтаксиса используется в основном с командой patch.

Далее - Создание spec-файла в XML-формате
Назад - Определение нового макроса
Содержание