Библиотека сайта rus-linux.net
Цилюрик О.И. Linux-инструменты для Windows-программистов | ||
Назад | Компиляция и сборка приложений | Вперед |
Создание проектов, сборка make
Многократно выполняемая сборка приложений проекта, с
учётом зависимостей и обновлений, делается утилитой make
,
которая использует оформленный сценарий сборки. По умолчанию имя
файла сценария сборки - Makefile
.
Утилита make
обеспечивает полную сборку указанной
цели в сценарии сборки, например:
$ make $ make clean
Если цель не указывается, то выполняется первая последовательная цель в файле сценария 5.
Утилита make
существует в разных ОС, из-за особенностей выполнения, наряду с
«родной» реализацией во многих ОС присутствует GNU
реализация gmake
, и поведение этих реализаций может достаточно существенно отличаться,
а в сценариях сборки указываться имя конкретной из утилит. В Linux:
$ ls -l /usr/bin/*make ... lrwxrwxrwx 1 root root 4 Окт 28 2008 /usr/bin/gmake -> make ... -rwxr-xr-x 1 root root 162652 Май 25 2008 /usr/bin/make $ make --version GNU Make 3.81 ...
Может использоваться и любой другой сценарный файл сборки:
$ make -f Makefile.my
Утилита make
автоматически определяет какие части большой программы должны быть
перекомпилированы, и выполняет необходимые для этого действия. На
самом деле, область применения make
не ограничивается только сборкой программ. Её можно использовать ее
для решения любых задач, где одни файлы должны автоматически
обновляться при изменении других файлов.
Простейший Makefile
состоит из синтаксических конструкций всего двух типов: целей и
макроопределений. Описание цели состоит из трех частей: имени цели,
списка зависимостей и списка команд интерпретатора shell, требуемых
для построения цели. Имя цели — непустой список файлов, которые
предполагается создать. Список зависимостей — список файлов, в
зависимости от которых строится цель. Имя цели и список зависимостей
составляют заголовок цели, записываются в одну строку и разделяются
двоеточием (':'). Список команд записывается со следующей строки,
причем все команды начинаются с обязательного символа табуляции.
Любая строка в последовательности списка команд, не начинающаяся с
табуляции (ещё одна команда) или '#' (комментарий) — считается
завершением текущей цели и началом новой.
Утилита make
имеет много умалчиваемых значений, важнейшими из которых являются
правила обработки суффиксов, а также определения внутренних
переменных окружения. Эти данные называются базой данных make
и могут быть рассмотрены:
$ make -p >make.suffix make: *** Не заданы цели и не найден make-файл. Останов. $ cat make.suffix # GNU Make 3.81 # Copyright (C) 2006 Free Software Foundation, Inc. ... # База данных Make, напечатана Thu Apr 14 14:48:51 2011 ... CC = cc LD = ld AR = ar CXX = g++ COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c COMPILE.C = $(COMPILE.cc) ... SUFFIXES := .out .a .ln .o .c .cc .C .cpp .p .f .F .r .y .l .s .S .mod .sym .def .h .info .dvi .tex .texinfo .texi .txinfo .w .ch... # Implicit Rules ... %.o: %.c # команды, которые следует выполнить (встроенные): $(COMPILE.c) $(OUTPUT_OPTION) $< ...
Подавляющее большинство интегрированных сред
разработки (IDE) или пакетов созданий переносимых инсталляций (таких
как automake
& autoconf
)
ставят своей задачей создание сценарного файла Makefile
для утилиты make
.
5. Бытует
заблуждение, что по умолчанию выполняется некая цель all
,
но это неверно, просто этим именем часто называют первую по порядку
цель, но её может попросту не быть среди других.
Предыдущий раздел: | Оглавление | Следующий раздел: |
Некоторые сравнения | Сборка модулей ядра |