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




ОСНОВНЫЕ ВОЗМОЖНОСТИ - часть 3


$(CFLAGS) $2 $(xy) $Z $(Z)

Две последние строки эквивалентны.

$*, $@, $?, $< - это четыре специальных макроса, значения которых изменяются во время выполнения команды. Они описываются в разделе ФАЙЛЫ ОПИСАНИЙ И ПОДСТАНОВКИ. В следующем фрагменте показаны определения и использования некоторых макросов:

OBJECTS = x.o y.o z.o LIBES = -lm prog: $(OBJECTS) cc $(OBJECTS) $(LIBES) -o prog . . .

Команда

make LIBES="-ll -lm"

загружает три объектных файла вместе с библиотекой lex'а (-ll) и математической библиотекой (-lm), потому что в первую очередь используются макроопределения из командной строки, а не одноименные определения в файле описаний. (В командах ОС UNIX аргументы, содержащие пробелы, должны заключаться в кавычки).

В качестве примера использования make'а приведем файл описаний, который может применяться при сопровождении самой утилиты make. Исходный текст утилиты содержится в нескольких C-файлах, а также включает yacc-спецификацию грамматики.

# Файл описаний для утилиты make

FILES = Makefile defs.h main.h doname.c misc.c files.c dosys.c gram.y OBJECTS = main.o doname.o misc.o files.o dosys.o gram.o LIBES = -lld LINTS = lint -p CFLAGS = -O LP = /usr/bin/lp

make: $(OBJECTS) $(CC) $(CFLAGS) $(OBJECTS) $(LIBES) -o make

$(OBJECTS): defs.h

cleanup: -rm *.o gram.c -du install: @size make /bin/make mv make /bin

lint : dosys.c doname.c files.c main.c misc.c gram.c $(LINT) dosys.c doname.c files.c main.c misc.c \ gram.c

# Распечатать файлы, состояние которых не # согласуется с "целевым файлом" print

print: $(FILES) pr $? | $(LP) touch print

Перед выполнением всякой команды утилита make распечатывает ее.

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

cc -o -c main.c cc -o -c doname.c cc -o -c misc.c cc -o -c flies.c cc -o -c dosys.c yacc gram.y mv y.tab.c gram.c cc -o -c gram.c cc main.o doname.o misc.o files.o dosys.o gram.o -lld \ -o make make: 24700 + 7100 + 18344 = 50144 /bin/make: 25200 + 6900 + 18108 = 50208

Две последние строки являются результатом выполнения команды

size make /bin/make

Печать самой командной строки подавляется знаком @ в файле описаний.




Содержание  Назад  Вперед