Операционная система UNIX. Руководство программиста




Утилита make(1)


Если исходный текст программы размещается в нескольких файлах, при изменении одного из них необходимо выяснять, какие еще модули необходимо перекомпилировать. Используя утилиту make(1), можно записать все зависимости между файлами, гарантировав таким образом автоматическую перекомпиляцию всех модулей, зависимых от измененного. Даже управление такой простой программой, как рассматривавшаяся выше при обсуждении средств отладки, облегчается, если пользоваться утилитой make.

Для использования утилиты make необходимо с помощью редактора сформировать файл с описаниями. Этот файл (по умолчанию его имя суть makefile) содержит информацию, используемую командой make

для построения целевого файла. Целевым файлом обычно является выполняемая программа. Файл описаний обычно содержит информацию трех типов:

  • Информацию о зависимостях между модулями, из которых составляется целевая программа.
  • Выполняемые команды, необходимые для формирования целевой программы. Используя информацию о зависимостях, make определяет, какие команды следует передать shell'у для выполнения.
  • Макроопределения, позволяющие использовать сокращения. Макроопределения, заданные внутри файла описаний, могут быть заменены макроопределениями, задаваемыми в командной строке при вызове утилиты 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 определяется как зависимый от четырех объектных файлов, каждый из которых определяется как зависимый от включаемого файла "recdef.h", и, по умолчанию, от соответствующих файлов с исходным текстом.
  • Макроопределение OBJECTS введено как удобное сокращение для ссылки на все составляющие модули.

Если Вы хотите тестировать или отлаживать результаты изменения одного из компонентов программы restate, для изменения опций команды cc можно, например, воспользоваться командой

make CFLAGS=-g restate

Мы провели очень короткий обзор утилиты make; этой утилите посвящена отдельная глава Руководства.




Содержание  Назад  Вперед