Вы здесь

Инструментарий программиста в Linux: MAKE

make

Утилита make автоматически определяет, какие части программы должны быть перекомпилированы и вызывает команды для их перекомпиляции. Наиболее часто make используется для компиляции C-программ и содержит особенности, ориентированные именно на такие задачи, но можно использовать make с любым языком программирования. Более того, применение утилиты make не ограничивается программами. Можно использовать еe для автоматизации любой задачи, где некоторые файлы должны автоматически порождаться из других.

Makefile

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

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

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

Простой make-файл состоит из правил (инструкций) следующего вида:

ПЕРЕМЕННАЯ = ЗНАЧЕНИЕ

ЦЕЛЬ1 ... : [ЗАВИСИМОСТЬ ...]
    КОМАНДА 1  
    КОМАНДА 2
ЦЕЛЬ2 ... : [ЗАВИСИМОСТЬ ...]
    КОМАНДА 1
    КОМАНДА 2  
...
  • ПЕРЕМЕННАЯ - похожа на переменную в sh. Может использоваться для подстановки значения в целях, зависимостях и командах
  • ЦЕЛЬ - обычно имя файла, который надо создать. Примерами целей являются исполняемые или объектные файлы. Цель также может быть именем выполняемого действия, как, например, clean.
  • ЗАВИСИМОСТЬ - это файл, изменение которого требует персборки цели. Часто цель зависит от нескольких файлов.
  • КОМАНДА - это действие, которое выполняет make, например запуск компилятора или удаление временных файлов. Каждая строка правила начинается с символа табуляции. Правило может иметь более чем одну команду - каждую на своей собственной строке. Длинные строки разбиваются на несколько с использованием обратного слэша, за которым следует перевод строки. Знак диез # является началом комментария. Строка с # до конца игнорируется. Комментарии так же могут переноситься на несколько строк с помощью обратного слэша в конце строки.

Запуск make

Синтаксис:

make [Опции] [Переменная='abc'] [Цель]

Квадратные скобки означают необязательность присутствия данной части.

  • Цель - имя цели, которую надо выполнить. По умолчанию - первая цель, описанная в make-файле.
  • Переменная ='abc' - переопределение переменных. Значения переменных, введенных в командной строке, имеют больший приоритет, чем определения в make-файле.

Опции:

  • -f file - явное задание имени make-файла
  • -n - имитация действий без реального выполнения, служит для отладки
  • -t - изменение времени модификации цели без реального выполнения
  • -q - проверка на необходимость обновления цели без реального выполнения.
Яндекс.Метрика