Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ZAOCH_KR_2l.doc
Скачиваний:
6
Добавлен:
04.12.2018
Размер:
164.35 Кб
Скачать
          1. При этом будет выполнена не первая цель , а та которая указана в качестве аргумента командной строки.

          2. В примере , все файлы исходных текстов включают `defs.h', но только те которые определяют команды редактирования включают `command.h', и только файлы низкого уровня, которые изменяют буфер редактора включают `buffer.h'

edit : main.o kbd.o command.o display.o \

insert.o search.o files.o utils.o

cc -o edit main.o kbd.o command.o display.o \

insert.o search.o files.o utils.o

main.o : main.c defs.h

cc -c main.c

kbd.o : kbd.c defs.h command.h

cc -c kbd.c

command.o : command.c defs.h command.h

cc -c command.c

display.o : display.c defs.h buffer.h

cc -c display.c

insert.o : insert.c defs.h buffer.h

cc -c insert.c

search.o : search.c defs.h buffer.h

cc -c search.c

files.o : files.c defs.h buffer.h command.h

cc -c files.c

utils.o : utils.c defs.h

cc -c utils.c

clean :

rm edit main.o kbd.o command.o display.o \

insert.o search.o files.o utils.o

Если правило не помещается на одной строке, то можно сделать перенос, пометив место переноса символом “\” (backslash).

Рассмотрим как make выполнит приведенный makefile. Выполняется первая ЦЕЛЬ. Первой ЦЕЛЬЮ является исполнимый файл редактора –edit. Эта ЦЕЛЬ зависит от объектных файлов (т.е. для получения исполнимого файла редактора необходимо собрать линковщиком следующие объектные файлы) main.o kbd.o command.o display.o insert.o search.o files.o utils.o представляющих собой ЗАВИСИМОСТИ. Далее make начинает по порядку просматривать ЗАВИСИМОСТИ. Т.к ЗАВИСИМОСТЬ main.o является ЦЕЛЬЮ правила

main.o : main.c defs.h

cc -c main.c

то make временно приостанавливает выполнение предыдущего и переходит к выполнению этого правила. main.o зависит от main.c defs.h (т.е для полученияобъектого файла main.o необходимо откомпилировать файл исходных текстов main.c в который включен заголовочный файл defs.h ). Далее make опять просматривает ЗАВИСИМОСТИ на предмет их совпадения с акой либо целью другого правила. Т.к в нашем примере совпадения нет, то сравниваются времена последней модификации файлов main.o и main.c defs.h .Если время последней модификации хотябы одного из файлов main.o и main.c более позднее, чем main.o , то make выполняет КОМАНДЫ cc -c main.c (т.е осуществляет компиляцию изменивщегося файла ЗАВИСИМОСТИ) и переходит к следующей ЗАВИСИМОСТИ предыдущей цели. При этом время последней модификации файла main.o изменится ( это время будет необходимо в предыдущей цели). Если эти времена совпадают, то КОМАНДЫ не выполняются , а происходит возврат к предыдущей цели. По приведенной аналогии make просматривает все ЗАВИСИМОСТИ цели edit. После этого сравниваютя времена последней модификации файлов ЦЕЛИ edit и ЗАВИСИМОСТЕЙ main.o kbd.o command.o display.o insert.o search.o files.o utils.o . Если время последней модификации хотябы одного из файлов ЗАВИСИМОСТИ будет более поздним чем у ЦЕЛИ , то make ваполнит КОМАНДЫ cc -o edit main.o kbd.o command.o display.o insert.o search.o files.o utils.o для получения нового исполнимого файла редактора.

Заметим, т.к цель clean не является ЗАВИСИМОСТЬЮ ни в первой ни в подчиненных целях, то это правило простым введением команды ‘make’ никогда не выполнится. Для его выолнения необходимо, как было сказано выше ввести команду ‘make clean’. Т.к. ЦЕЛЬ clean не имеет ЗАВИСИМОСТЕЙ, то выполнится только она, и никакие другие правила выполнены не будут.

Приложение 3.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]