Эффективное использование GNU Make

Правила


Основным "строительным элементом" make-файла являются правила (rules). В общем виде правило выглядит так:

... : ... ... Цель (target) - это некий желаемый результат, способ достижения которого описан в правиле. Цель может представлять собой имя файла. В этом случае правило описывает, каким образом можно получить новую версию этого файла. В следующем примере:

iEdit: main.o Editor.o TextLine.o gcc main.o Editor.o TextLine.o -o iEdit

целью является файл iEdit (исполняемый файл программы). Правило описывает, каким образом можно получить новую версию файла iEdit (скомпоновать из перечисленных объектных файлов).

Цель также может быть именем некоторого действия. В таком случае правило описывает, каким образом совершается указанное действие. В следующем примере целью является действие clean (очистка).

clean: rm *.o iEdit Подобного рода цели называются псевдоцели (pseudotargets) или абстрактные цели (phony targets).

Зависимость (dependency)- это некие "исходные данные", необходимые для достижения указанной в правиле цели. Можно сказать что зависимость - это "предварительное условие" для достижения цели. Зависимость может представлять собой имя файла. Этот файл должен существовать, для того чтобы можно было достичь указанной цели. В следующем правиле:

iEdit: main.o Editor.o TextLine.o gcc main.o Editor.o TextLine.o -o iEdit

файлы main.o, Editor.o и TextLine.o являются зависимостями. Эти файлы должны существовать для того, чтобы стало возможным достижение цели - построение файла iEdit.

Зависимость также может быть именем некоторого действия. Это действие должно быть предварительно выполнено перед достижением указанной в правиле цели. В следующем примере зависимость clean_obj является именем действия (удалить объектные файлы программы):

clean_all: clean_obj rm iEdit clean_obj: rm *.o

Для того чтобы цель clean_all была достигнута, нужно сначала выполнить действие (достигнуть цели) clean_obj.

Команды - это действия, которые необходимо выполнить для обновления либо достижения цели. В следующем примере:

iEdit: main.o Editor.o TextLine.o gcc main.o Editor.o TextLine.o -o iEdit

командой является вызов компилятора GCC. Утилита make отличает строки, содержащие команды, от прочих строк make-файла по наличию символа табуляции (символа с кодом 9) в начале строки. В приведенном выше примере строка:

gcc main.o Editor.o TextLine.o -o iEdit должна начинаться с символа табуляции.



Содержание раздела