Баннер мобильный (1) Пройти тест

Makefile

Глоссарий

27 марта 2023

Поделиться

Скопировано

Содержание

    Makefile — это файл с инструкциями для утилиты make, которая нужна для автоматической сборки проекта.

    Что такое make и зачем она нужна

    Во время работы над проектом создаются несколько файлов. Это набор кода, сохраненный в документе с определенным расширением. Например, для C++ код сохраняется в файлы .CPP. Чтобы набор кода стал исполняемым и превратился в файл, который можно запустить, его необходимо скомпилировать. Для этого используется специальная программа — компилятор. Она преобразует текст, написанный на языке программирования, в машинный код. Для C++ часто используют g++, бесплатный компилятор из набора gcc.

    Компилятор превращает набор кода в объектные файлы, или модули. С помощью линковщика они соединяет все воедино с учетом зависимостей и связей между исходниками. Результат — готовый исполняемый файл.

    Утилита make автоматизирует процесс — разработчику достаточно набрать одну команду в консоли. Она преобразует исходный код в модули, а их — в исполняемые файлы, которые можно запустить. Так создаются библиотеки и разнообразные программные продукты. Makefile показывает программе правила, по которым нужно выполнять преобразования.

    Make работает на Linux и системах на базе Unix — для этих ОС утилита считается основным средством сборки программ. В Windows тоже есть концепция Makefile, но управляет этими файлами утилита nmake. У make две версии: для платформы BSD и для GNU. Первая используется в операционных системах FreeBSD, OpenBSD и NetBSD, вторая — в MacOS и Linux. Утилита обычно есть в ОС по умолчанию.

    Для чего нужен Makefile

    Чаще всего утилиту и файлы Makefile используют разработчики, пишущие код в операционных системах семейства Unix и Linux. Но мейкфайлы могут потребоваться и программистам, работающим под Windows. Чаще всего они применяются:

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

    Что такое правила Makefile

    Makefile одновременно является и инструкцией, и исполняемым файлом, который запускает утилита make. Он содержит код на специальном скриптовом языке, описывающий конечные условия — они должны выполняться при сборке проекта. Это называется правилами.

    Синтаксис правил в целом такой:

    цель: зависимости

              команды

    Цель. Файл, который программа make должна сгенерировать после запуска. Это может быть модуль или исполняемый файл. В Makefile указываются его будущее имя и расширение. Иногда цель — не файл, а действие. Это бывает нужно, если программист использует утилиту make, чтобы сделать что-то, а не собрать проект.

    Цель по умолчанию — all без зависимостей. Это означает, что утилита make при исполнении инструкции сразу перейдет к командам.

    Зависимости. Это начальные условия, файлы и действия, от которых зависит цель. Их может не быть — тогда make начнет сразу выполнять команды ниже. Но если зависимости есть, утилита сначала проверит их и выполнит все связанные с ними действия. Только после этого она перейдет к цели.

    Неочевидный момент: в одном мейкфайле чаще всего несколько целей, и каждая из них может быть зависимостью для другой. Тогда одна цель будет выполняться в зависимости от другой.

    Например, если цель А — начальное условие для цели Б, то цель Б выполнится только после цели А.

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

    Что содержит Makefile

    Разберем содержимое Makefile подробнее. Правила тоже бывают разными, а для более удобной записи существует вспомогательный синтаксис.

    Явные правила. Это записи, которые описывают, как и какие файлы надо преобразовать. Это самый простой способ описать преобразования в Makefile: действия, условия и цели указываются напрямую.

    Неявные правила. Также называются негласными. Это более сложный случай: в правилах не пишется напрямую, что должна сделать утилита make. В них используются переменные, а значит, особенности выполнения могут меняться.

    Например, разработчик собирает проект. Он может создать явное правило, где в действиях четко пропишет, какой компилятор вызвать для обработки исходного кода. Но для большей гибкости он может пойти другим путем: вместо прямого указания компилятора подставить переменную, специальную структуру для хранения данных. А в переменную по ходу выполнения скрипта можно записать любое название компилятора. Например, в зависимости от того или иного условия.

    В результате проект соберется с одним или другим компилятором — это будет зависеть от значения переменной на момент выполнения правила.

    Определения переменных. Не правила, а строки, в которых описываются переменные. Так им присваиваются значения, которые автоматически подставятся в действия, где используются переменные.

    Выглядит это так:

    <название переменной> = <значение переменной>

    Содержимое переменной считается строкой. Ее можно подставлять в правила следующим образом: $(<имя переменной>).

    Директивы. Разнообразные конструкции, которые расширяют возможности Makefile. Например, с помощью соответствующих директив можно создать в файле условие «если — то», которое выполнит определенное действие, если истинно какое-либо выражение. Можно подключить к нему другие мейкфайлы, приостановить выполнение текущего файла и открыть другой, чтобы он отработал первым.

    На этом возможности директив не ограничиваются. Конструкции нужны для создания сложных мейкфайлов.

    Комментарии. Текст, который ничего не делает — только описывает происходящее. Он не влияет на выполнение мейкфайла и нужен для разработчиков. Там находится краткая документация или справка, которая рассказывает человеку, что именно происходит в тот или иной момент.

    Комментарий в Makefile — это строка, которая начинается с #. Весь текст до конца строки после этого символа считается частью комментария.

    Когда и как выполняется Makefile

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

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

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

    Как начать пользоваться make и Makefile

    Для работы необходима только операционная система на базе Unix. Это любая ОС платформы BSD, MacOS или ОС семейства Linux: Debian, Ubuntu, Gentoo и другие. В эти ОС утилита make встроена по умолчанию. Можно сразу начать ей пользоваться и создавать мейкфайлы.

    Если у вас Windows, необходимо или установить вторую ОС, или воспользоваться аналогом make под названием nmake. Утилита входит в состав Microsoft Visual Studio, большого набора программного обеспечения для разработчиков.

    Поделиться

    Скопировано

    0 комментариев

    Комментарии