Большая часть макросов может выполнять простые текстовые подстановки. Также макросу можно передать параметры, и получить доступ к их значениям, подобно тому, как это происходит в 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-формате
Назад - Определение нового макроса
Содержание