Основы использования утилиты make.

Утилита ‘make’ автоматически определяет, какие части составной программы (программы, состоящей из нескольких файлов) необходимо перекомпилировать, и выполняет их команды для перекомпиляции.

Далее использование ‘make’ будет показано на С программах, так как они наиболее часто используются в Linux, но вы можете испльзовать ‘make’ с любым другим языком программирования, чей компилятор может работать с командами интерпретатора. Конечно ‘make’ неограничена программированием. Вы можете ее использовать для описания любой задачи, в которой некоторые файлы должны обновляться автоматически , всякий раз когда изменяютя файлы, от которых они зависят.

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

Если существует подходящий makefile , при каждом изменении некоторых исходных файлов, составляющих программу, команда оболочки

Make

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

Далее будет рассмотрен простой makefile , который описывает как компилировать и линковать текстовый редактор, который состоит из восьми файлов исходных текстов на языке С и трех заголовочных файлов.

Когда ‘make’ перекомпилирует редактор, каждый измененный файл исходных текстов должен быть перекомпилирован. Если заголовочный файл был изменен, каждый файл исходных текстов, включающий этот зоголовочный файл должен быть перекомпилирован. Каждая процедура компиляции создает объектный файл соответствующий исходному. Наконец, если любой файл исходных текстов был перекомпилирован, все объектные файлы, и вновь созданные и осташиеся от предыдущей компиляции, должны быть собраны вместе линковщиком для создания нового исполнимого файла текстового редактора.

Простой makefile состоит из правил следующего вида:

ЦЕЛЬ ... : ЗАВИСИМОСТИ ...

КОМАНДЫ

...

...

ЦЕЛЬ – это обычно имя файла, который создается программой; примерами ЦЕЛИ являются исполнимые и объектные файлы. ЦЕЛЬ также может быть именем действия , которое необходимо выполнить, такое как ‘clean’ (очистка от ненужных файлов).

ЗАВИСИМОСТИ – это файлы, кторые используются как исходные для создания файла цели. ЦЕЛЬ обычно зависит от нескольких файлов.

КОМАНДЫ – это действия которые выполняет ‘make’. Правило может иметь более одной кманды, каждая из которых должна пиписаться с новой строки. Заметим, что вначале каждой строки команд необходимо использовать символ табуляции.

Обычно КОМАНДЫ используются в правиле с ЗАВИСИМОСТЯМИ и служат для создания файла ЦЕЛИ если изменится какая нибудь ЗАВИСИМОСТЬ. Однако есть правила, которые определяют КОМАНДЫ для ЦЕЛИ не имея ЗАВИСИМОСТЕЙ. Например, правило ,содержащее КОМАНДЫ удаления и ассоциированное с целью ‘clean’ не имеет ЗАВИСИМОСТЕЙ.

Принцип работы make следующий - после запуска, make начинает сначала просматривать содержимое файла makefile. Найдя первую ЦЕЛЬ, make смотрит по порядку написания ЗАВИСИМОСТИ. Если ЗАВИСИМОСТЬ является файлом, но не является ЦЕЛЬЮ какого нибудь другого правила, то сравниваются времена последней модификации этой ЗАВИСИМОСТИ и ЦЕЛИ. Если время последней модификации ЦЕЛИ более раннее, чем ЗАВИСИМОСТИ, то make отмечает,что необходимо выполнение КОМАНД данного правила и переходит к следующей ЗАВИСИМОСТИ. Если ЗАВИСИМОСТЬ является ЦЕЛЬЮ какого нибудь другого правила, то make вначале переходит к выполнению этого зависимого правила. Затем make возвращается к исходному правилу и смотрит времена последней модификации ЦЕЛИ и данной ЗАВИСИМОСТИ. После прохождения всех ЗАВИСИМОСТЕЙ make выполняет КОМАНДЫ. В случае, если после прохождения всех ЗАВИСИМОСТЕЙ правила выяснится, что времена последней модификации ЗАВИСИМОСТЕЙ и ЦЕЛИ совпадают, то make выполнять КОМАНДЫ не будет и прекратит работу. Замтим, что выполняется по умолчанию только одно первое встретившееся правило. Если есть правила, не являющееся ЗАВИСИМОСТЬЮ первого, то для его выполнения необходимо указать его имя в качестве аргумента make. Например ,если нам необходимо удалить ненужные файлы, и в makefile присутствует ЦЕЛЬ clean, то для ее выполнения необходимо ввести команду

Make clean

Наши рекомендации