Операционные системы. Замятин А.В - 46 стр.

UptoLike

Составители: 

46
Все исходные тексты программы обрабатываются одинаково: для
них вызывается компилятор gcc. С использованием шаблонных правил
этот пример можно переписать так:
iEdit: main.o Editor.o TextLine.o
gcc $^ -o $@
%.o: %.cpp
gcc -c $^
Когда make ищет в файле проекта правило, описывающее способ
достижения искомой цели (см. п. «Достижение цели», функция «Най-
тиПравило»), то в расчет принимаются и шаблонные правила. Для каж-
дого из них проверяется, нельзя ли задействовать это правило для дос-
тижения искомой цели.
Пример создания более сложного make-файла
Предыдущие два примера создания make-файлов существенно уп-
рощают создание проектов. Следует отметить, что работа по перечисле-
нию всех объектных файлов, составляющих программу, может быть
также автоматизирована. При этом вариант создания бинарного файла
типа
iEdit: *.o
gcc $< -o $@
может не сработать, т. к. в указанном случае будут учтены только суще-
ствующие в данный момент объектные файлы. Особенно это актуально
в случае наличия сложных заголовочных файлов (*.h), определющих за-
висимости частей проекта. Для того чтобы избежать подобного затруд-
нения, следует использовать более сложный способ, который основан
на предположении, что все файлы, содержащие исходный текст, долж-
ны быть скомпилированы и скомпонованы в результирующую про-
грамму. Такой вариант методики сборки состоит из двух шагов:
1. Получить список всех файлов с исходным текстом программы
(всех файлов с расширением «cpp»). Для этого следует использовать
функции обработки строк, в данном случае функцию wildcard, которая
получает список файлов с заданным шаблоном в указанном каталоге.
2. Преобразовать список исходных файлов в список объектных
файлов (заменить расширение «cpp» на расширение объектных файлов
«o»). Для этого следует воспользоваться функцией patsubst, которая за-
меняет заданную подстроку в заданной строке.
Следующий пример содержит модифицированную версию make-
файла с использованием указанных двух шагов: