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

UptoLike

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

211
Автоматическое построение зависимостей от заголовочных файлов
Автоматизировав перечисление объектных файлов, остается про-
блема перечисления зависимостей объектных файлов от заголовочных
файлов. Например:
….
main.o: main.h Editor.h TextLine.h
Editor.o: Editor.h TextLine.h
TextLine.o: TextLine.h
Перечисление зависимостей «вручную» может потребовать суще-
ственного объема работы. Не всегда достаточно просто открыть файл с
исходным текстом и перечислить имена всех заголовочных файлов,
подключаемых с помощью директивы «#include»: заголовочные файлы
могут включать в себя другие заголовочные файлы и подобная «цепочка
зависимостей» может быть достаточно длинной. Построение списка за-
висимостей можно реализовать с использованием утилиты make и ком-
пилятора gcc.
Для совместной работы с make компилятор gcc имеет несколько
опций:
Ключ компиляции M. Для каждого файла с исходным текстом
препроцессор будет выдавать на стандартный выход список зависимо-
стей в виде правила для программы make. В список зависимостей попа-
дает сам исходный файл, а также все файлы, включаемые с помощью
директив «#include <имя_файла>» и «#include "имя_файла"». После за-
пуска препроцессора компилятор останавливает работу и генерации
объектных файлов не происходит.
Ключ компиляции MM. Аналогичен ключу M, но в список за-
висимостей попадает только сам исходный файл и файлы, включаемые с
помощью директивы «#include "имя_файла"».
Ключ компиляции MD. Аналогичен ключу M, но список зави-
симостей выдается не на стандартный выход, а записывается в отдель-
ный файл зависимостей. Имя этого файла формируется из имени исход-
ного файла путем замены его расширения на расширение «d». Напри-
мер, файл зависимостей для файла main.cpp будет называться main.d. В
отличие от ключа M компиляция проходит обычным образом, а не пре-
рывается после фазы запуска препроцессора.
Ключ компиляции MMD. Аналогичен ключу -MD, но в список
зависимостей попадает только сам исходный файл, и файлы, включае-
мые с помощью директивы «#include "имя_файла"».
Как видно, компилятор может работать двумя способами в одном
случае он выдает только список зависимостей и заканчивает работу п-