Операционная система UNIX. Руководство программиста

Выходные преобразования макросов


Вхождения макросов в команды shell'а раскрываются в момент выполнения. В общем случае обращение к макросу выглядит так:

$(макро:цепочка1=цепочка2)

Подобная конструкция преобразуется следующим образом. Сначала определяется значение $(макро). Затем каждое вхождение цепочки1

в данное значение заменяется на цепочку2; при этом вхождение цепочки1 в $(макро) понимается как сопоставление с регулярным выражением вида

.*цепочка1[табуляция|пробел]

то есть значение $(макро) рассматривается как набор разделенных пробелами или табуляциями цепочек символов и в конце этих цепочек цепочка1 заменяется на цепочку2.

Описанная форма выходных преобразований макросов была выбрана потому, что make обычно имеет дело с окончаниями имен файлов. Польза выходных преобразований становится очевидной при поддержании архивных библиотек. В следующем примере модификация библиотеки выполняется за один просмотр:

$(LIB) : $(LIB)(a.o) $(LIB)(b.o) $(LIB)(c.o) $(CC) -c $(CFLAGS) $(?:.o=.c) $(AR) $(ARFLAGS) $(LIB) $? rm $?

Зависимость указанного вида необходима для каждого из типов исходных файлов (суффиксов), результаты трансляции которых образуют архивную библиотеку. Выходные преобразования позволяют воспользоваться той богатой информацией, которую предоставляет make.



Содержание раздела