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

       

Динамические параметры зависимостей


Параметр имеет смысл только в строке зависимостей make-файла. $$@ обозначает часть текущей строки слева от двоеточия ($@). Кроме того, имеется параметр $$(@F), позволяющий получить доступ к обозначающему файл компоненту $@. Так, в следующей записи:

cat: $$@.c

строка зависимостей в момент выполнения преобразуется в цепочку cat.c. Это полезно для построения большого числа выполняемых файлов, у каждого из которых только один исходный файл. Например, в каталоге, содержащем утилиты системы UNIX, может быть make-файл вида:

CMDS = cat dd echo date cmp comm chown

$(CMDS): $$@.c $(CC) -O $? -o $@

Конечно, это только подмножество всех однофайловых программ. Для программ, состоящих из многих файлов, обычно заводится специальный каталог и формируется отдельный make-файл. Для каждого конкретного файла, требующего специфической процедуры компиляции, в make-файле должна быть предусмотрена особая запись.

Еще одна полезная форма параметра зависимостей - $$(@F). Этот параметр представляет обозначающую файл часть $$@. Он также вычисляется во время выполнения. Его польза становится очевидной, если попытаться поддерживать каталог /usr/include при помощи make-файла, который находится в каталоге /usr/src/head. Файл описаний /usr/src/head/makefile должен выглядеть так:

INCDIR = /usr/include

INCLUDES = \ $(INCDIR)/stdio.h $(INCDIR)/pwd.h $(INCDIR)/dir.h $(INCDIR)/a.out.h

$(INCLUDES): $$(@F) cp $? $@ chmod 0444 $@

Использование этого make-файла должно приводить в полное соответствие содержимое каталога /usr/include при обновлении любого из упомянутых файлов, расположенных в каталоге /usr/src/head.



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