next up previous contents
Next: Алгоритм работы make Up: Средство управления проектом make Previous: Назначение make   Contents

Файл описания проекта - make-файл

Простой make-файл для компиляции простой программы - редактора edit, состоящего из восьми исходных файлов .cc и трех заголовочных файлов (.h):

Makefile for simple editor

edit : edit.o kbd.o commands.o display.o $\backslash$
insert.o search.o files.o utils.o
gcc -g -o edit edit.o kbd.o commands.o display.o $\backslash$
insert.o search.o files.o utils.o -lg++

edit.o : edit.cc defs.h
gcc -g -c -Wall edit.cc
kbd.o : kbd.cc defs.h command.h
gcc -g -c -Wall kbd.cc
commands.o : command.cc defs.h command.h
gcc -g -c -Wall commands.cc
display.o : display.cc defs.h buffer.h
gcc -g -c -Wall display.cc
insert.o : insert.cc defs.h buffer.h
gcc -g -c -Wall insert.cc
search.o : search.cc defs.h buffer.h
gcc -g -c -Wall search.cc
files.o : files.cc defs.h buffer.h command.h
gcc -g -c -Wall files.cc
utils.o : utils.cc defs.h
gcc -g -c -Wall utils.cc

Этот файл содержит последовательность девяти правил. В общем виде каждое правило выглядит так: <цель_1> <цель_2> ... <цель_n>: <зависимость_1> <зависимость_2> ... <зависимость_n> <команда_1> <команда_2> ... <команда_n>

Правило состоит из строки, содержащей два списка имен, разделенных двоеточием, за которыми следуют одна или несколько строк, начинающихся с табуляции. Любая строка может быть продолжена, как показано выше, если закончить ее наклонной чертой, которая означает пробел, соединяя строку с последующей. Символ `#' отмечает начало комментария, который продолжается до конца данной строки.

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

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

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

Команды - это действия, которые необходимо выполнить для обновления либо достижения цели. Утилита make отличает строки, содержащие команды, от прочих строк make-файла по наличию символа табуляции (символа с кодом 9) в начале строки. Это команды shell (присутствуют в оболочке Linux), которые выполняются в определенном порядке, чтобы создать или обновить цель правила (обычно говорят обновить - update).



2004-06-22