Если исходный текст программы размещается в нескольких файлах, при изменении одного из них необходимо выяснять, какие еще модули необходимо перекомпилировать. Используя утилиту make(1), можно записать все зависимости между файлами, гарантировав таким образом автоматическую перекомпиляцию всех модулей, зависимых от измененного. Даже управление такой простой программой, как рассматривавшаяся выше при обсуждении средств отладки, облегчается, если пользоваться утилитой make.
Для использования утилиты make необходимо с помощью редактора сформировать файл с описаниями. Этот файл (по умолчанию его имя суть makefile) содержит информацию, используемую командой make
для построения целевого файла. Целевым файлом обычно является выполняемая программа. Файл описаний обычно содержит информацию трех типов:
Утилита make работает, проверяя время последнего изменения модулей, указанных в файле описаний. Если при этом оказывается, что у некоторого модуля время последнего изменения меньше, чем у модуля, от которого он зависит, то указанная команда (обычно компиляция) направляется shell'у для выполнения.
Команда make допускает три типа аргументов: опции, макроопределения и имена целевых файлов. Если в опции командной строки не задано имя файла с описаниями, то make отыскивает в текущем каталоге файлы с именами makefile или Makefile. Ниже приводится пример файла описаний.
OBJECTS = restate.o oppty.o pft.o rfe.o all: restate restate: $(OBJECTS) $(CC) $(CFLAGS) $(LDFLAGS) $(OBJECTS) -o restate
$(OBJECTS): ./recdef.h
clean: rm -f $(OBJECTS)
clobber: clean rm -f restate
В данном примере
Если Вы хотите тестировать или отлаживать результаты изменения одного из компонентов программы restate, для изменения опций команды cc можно, например, воспользоваться командой
make CFLAGS=-g restate
Мы провели очень короткий обзор утилиты make; этой утилите посвящена отдельная глава Руководства.