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