Makefile

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Makefile
MIME-тип text/x-makefile
Тип формата Автоматизация сборки
Стандарт(ы) POSIX

makefile — это файл, содержащий набор инструкций, используемых утилитой make в инструментарии автоматизации сборки.

Чаще всего makefile содержит указания для утилиты make о том, как компилировать и компоновать программу. Например, для языков программирования С/C++ исходный файл C или C++ должен быть перекомпилирован при каждом своем изменении. Если меняется заголовочный файл, каждый C/C++ исходный файл, включающий его, должен быть перекомпилирован, чтобы быть безопасным. Каждая компиляция создает объектный файл, соответствующий исходному файлу. Наконец, если исходный файл был скомпилирован, то все объектные файлы, будь то вновь созданные или сохраненные с предыдущих компиляций, должны быть скомпонованы вместе, чтобы собрать новый исполняемый файл программы[1]. Эти инструкции вместе со своими зависимостями указаны в makefile. Если с последней компиляции ни один из файлов, необходимых для сборки, не менялся, то при компиляции ничего не происходит. Для больших проектов, использование make-файлов может значительно сократить время сборки приложений при изменении всего лишь нескольких исходных файлов.

Операционная система

[править | править код]

Unix-подобные ОС

[править | править код]

Make-файлы возникли на Unix-подобных системах и остаются основным средством сборки программ в данных окружениях.

Windows поддерживает различные виды make-файлов при помощи утилиты nmake. Стандартные make-файлы из Unix-подобных ОС могут быть выполнены в операционной системе Windows в среде Cygwin.

Содержание

[править | править код]

Make-файлы состоят из 5 составляющих: явных правил, неявных правил, определений переменных, директив и комментариев.

  • Явное правило сообщает, когда и как нужно преобразовать один или несколько файлов, которые называются целевыми правилами. В явном правиле перечисляются и другие файлы, от которых зависят цели, называемые зависимостями цели, а также указывается способ, используемый для создания или обновления цели.
  • Неявное правило сообщает, когда и как преобразовать класс файлы, исходя из их названия. Оно содержит описание, как цель может влиять на файлы с именем, похожим на цель, и указывает способ для создания или обновления такой цели.
  • Определение переменной является строкой, в которой указывается текстовое строковое значение переменной, которая может быть подставлена в текст позже.
  • Директива указывает утилите make на выполнение чего-либо особенного при чтении файла makefile (например, чтение другого make-файла).
  • Комментарии в строке makefile начинаются с символа ‘#’. Сам комментарий и остальная часть строки игнорируется.

Make-файл содержит «правила» в следующей форме:

target: dependencies
    system command(s)

Целью (target) обычно является имя файла, который генерируется программой; примеры целей — исполняемые или объектные файлы. Цель может также являться именем действия, которое необходимо выполнить, например, «clean».

Зависимость (также называется предварительным условием) — это файл, используемый в качестве входных данных для создания цели. Цель часто зависит от нескольких файлов. Однако, правило, указывающее способ для цели, не должно иметь любых предварительных условий. Например, правило, содержащее команду delete («удалить»), связано с целью clean («очистить»), не имеющей предварительного условия.

Системная команд(ы) (также называемая способом) — это действие, которое выполняет утилита make. Способ может содержать более одной команды, либо в той же строке или каждая в своей строке.

Выполнение

[править | править код]

make-файл выполняется при помощи команды make, например, make [options] [target1 target2 ...]. По умолчанию, когда утилита make ищет make-файл и если имя make-файла не было указано в качестве параметра, то make пробует следующие имена по порядку: makefile и Makefile.

Простой makefile, который описывает, как исполняемый файл с именем edit зависит от четырех объектных файлов, которые, в свою очередь, зависят от четырех C-исходников и двух заголовочных файлов.

edit: main.o kbd.o command.o display.o 
    cc -o edit main.o kbd.o command.o display.o
     
main.o: main.c defs.h
    cc -c main.c
kbd.o: kbd.c defs.h command.h
    cc -c kbd.c
command.o: command.c defs.h command.h
    cc -c command.c
display.o: display.c defs.h
    cc -c display.c

clean:
     rm edit main.o kbd.o command.o display.o

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

Список литературы

[править | править код]
  1. POSIX Target Rules. Дата обращения: 5 марта 2018. Архивировано 18 февраля 2018 года.