Команда make и make-файлы

make - это утилита, которая контролирует процесс получения исполняемых файлов или других неисходных файлов программы из исходных файлов. make получает знания о том, как компилировать программу, из специального файла, называемого make-файлом или файлом сборки, в котором перечисляются все неисходные файлы и как их получить из исходных файлов. Чтобы использовать make для сборки программы из исходных кодов, необходимо написать make-файл.

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

Сочетание команды make и make-файла – мощное средство управления проектами. Оно часто применяется не только для управления компиляцией исходного программного кода, но и для подготовки интерактивного справочного руководства или установки приложения в нужный каталог.


 

Синтаксис make-файла

make-файл состоит из набора зависимостей и правил.

У зависимости есть цель или задание (выходной файл, который нужно создать) и набор исходных файлов, от которых она зависит.

Правила или инструкции описывают, как создать выходной файл из зависимых файлов. Обычно цель – это единый исполняемый файл.

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

 

Опции и параметры команды make

У программы make есть несколько опций. Наиболее часто применяются следующие:

-k, сообщающая make о необходимости продолжать выполнение, если обнаружена ошибка, а не останавливаться при появлении первой проблемы. Эту опцию можно использовать, например, для выявления за один проход всех исходных файлов, которые не могут быть откомпилированы;

-n, сообщающая make о необходимости вывода перечня требуемых действий без реального их выполнения;

-f <файл>, позволяющая сообщить make о том, какой файл применять как make-файл. Если вы не используете эту опцию, стандартная версия программы make ищет в текущем каталоге первый файл, названный makefile. Если его нет, программа ищет Makefile. В соответствии с соглашением программисты Linux применяют имя Makefile, которое позволяет поместить файл сборки первым в списке файлов каталога, заполненного именами файлов, состоящими из строчных букв.

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

Зависимости

Зависимости определяют, как каждый файл в окончательном приложении связан исходными файлами.

Пусть окончательному приложению myappl требуются (оно зависит от) client.o, student.o; и также для client.o (client.cpp и student.h); student.o (student.cpp и student.h). Таким образом, на файл client.o влияют изменения файлов client.cpp и student.h, и он нуждается в пересоздании с помощью повторной компиляции файла client.cpp, если был изменен любой из двух указанных файлов.

В make-файле записываются эти правила, указывая имя задания, двоеточие, пробелы или табуляции и затем разделенный пробелами или табуляциями перечень файлов, применяемых для создания выходного файла задания. Приведем список зависимостей для рассматриваемого примера:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: