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

UptoLike

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

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