GNU Make |
Автор: admin Просмотров: 3758 Комментарии:
Добавлен: 1 мая 2015
Обновлено: 1.05.2015 - 14:19
Инструмент для управления созданием исполняемых файлов программы и других файлов кроме исходников самой программы.
Возможности GNU Make
Make получает информацию о том как собрать программу из файла Makefile. Make указывает последовательность действий, которые должны быть выполнены для построения программы. В основном эта последовательность состоит из вызовов команд компилятора, компоновщика и файловой системы. Основной особенностью утилиты make является то, что она не просто выполняет последовательность шагов, что может значительно замедлить пересборку программы. Make работает лишь над теми файлами, которые изменились со времени предыдущего вызова программы. Так что времени на пересборку требуется значительно меньше.
Другие версии
Существует несколько версий Make, основанный на первом Make или написанных с нуля, которые используют те же форматы файлов, базовые принципы и алгоритмы и содержат некоторые улучшения и дополнения. Например:- BSD Make с возможностью параллельной сборки; в той или иной форме перешёл на FreeBSD, NetBSD и OpenBSD.
- GNU make входит в большинство дистрибутивов GNU/Linux и часто используется в сочетании с GNU build system.
Использование Make
make [-f make-файл] [цель] ...Если опция f не указана, используется имя по умолчанию для make-файла - Makefile (однако, в разных реализациях make кроме этого могут проверяться и другие файлы, например GNUmakefile). Make открывает make-файл, считывает правила и выполняет команды, необходимые для создания указанной цели.
Make-файл
Программа make выполняет команды в соответствии с правилами в специальном файле. Этот файл называется make-файл (makefile, мейкфайл). Как правило, make-файл описывает, каким образом следует компилировать и компоновать программу. Make-файл состоит из правил и переменных. Правила имеют следующий синтаксис:
цель1 цель2 ...: реквизит1 реквизит2 ...Правило представляет собой набор команд, выполнение которых приведет к составлению файлов-целей из файлов-реквизита.
Команда1
Команда2
...
Правило сообщает make, что файлы, полученные в результате работы команд (цели) являются зависимыми от соответствующих файлов-реквизита. make никак не проверяет и не использует содержание файлов-реквизита, однако, указания списка файлов-реквизита нужно только для того, чтобы make убедилась в наличии этих файлов перед началом выполнения команд, и для отслеживания зависимостей между файлами.
Обычно цель представляет собой имя файла, который генерируется в результате работы указанных команд. Целью также может служить название определенного действия, которое будет выполнено в результате выполнения команд (например, цель clean в make-файлах для компиляции программ обычно удаляет все файлы, созданные в процессе компиляции).
Строки, в которых записаны команды, должны начинаться с символа табуляции.
Рассмотрим несложную программу на Си. Пусть программа program состоит из пары файлов кода - main.c и lib.c, а также с одной заголовачного файла - defines.h, который включен в оба файла кода. Тогда для создания program необходимо из пар (main.c defines.h) и (lib.c defines.h) создать объектные файлы main.o и lib.o, а затем слинковать их в program. При сборке вручную нужно дать следующие команды:
cc -c main.c defines.hЕсли в процессе разработки программы в файл defines.h будут внесены изменения, потребуется перекомпилирование обоих файлов и линковка, а если изменим только lib.c, то повторную компиляцию main.о можно не выполнять. Таким образом, для каждого файла, который мы должны получить в процессе компиляции, нужно указать, на основе каких файлов, а также с помощью каких команд он создается. Программа make на основе этих данных выполняет следующее:
cc -c lib.c defines.h
cc -o program main.o lib.o
- Собирает из этой информации правильную последовательность команд для получения необходимых конечных файлов;
- Инициирует создание запланированного файла только в случае, если такого файла не существует или он старше файлов от которых он зависит.
Если при запуске make явно не указать цель, то будет обрабатываться первая цель в make-файле, имя которой не начинается с символа «.».
Для программы program достаточно написать следующий make-файл:
program: main.o lib.oСтоит отметить ряд особенностей. В имени второй цели указаны два файла и для этой же цели не указана команда компиляции. Кроме того, нигде явно не указана зависимость объектных файлов от «* .c»-файлов. Дело в том, что программа make имеет встроенные правила для получения файлов с определенными расширениями. Так, для цели-объектного файла (расширение «.o») при обнаружении соответствующего файла с расширением «.с» будет вызван компилятор «сс-с» с указанием в параметрах этого «.с»-файла и всех файлов зависимостей.
cc -o program main.o lib.o
main.o lib.o: defines.h
Синтаксис для определения переменных:
переменная = значениеЗначением может быть произвольная последовательность символов, включая пробелы и обращения к значениям других переменных. С учетом сказанного, можно модифицировать наш make-файл так:
OBJ = main.o lib.oНадо отметить, что вычисление значения переменных происходит только в момент использования (используется так называемое ленивое вычисления). Например, при сборке цели all со следующего make-файла на экран будет выведена строка «Что?».
program $ (OBJ)
cc -o program $ (OBJ)
$ (OBJ): defines.h
foo = $ (bar)Предположим, что в проект добавился второй заголовочный файл lib.h, который включается только в lib.c. Тогда make-файл увеличится еще на одну строчку:
bar = $ (ugh)
ugh = Что?
all:
echo $ (foo)
lib.o: lib.hТаким образом, один целевой файл может указываться в нескольких целях. При этом полный список зависимостей для файла будет составлен из списков зависимостей всех целей, в которых он участвует, создание файла будет осуществляться только один раз.
Перевод с Википедии: https://uk.wikipedia.org/wiki/Make
------------------------
ТРИО теплый пол отзыв
Заработок на сокращении ссылок
Earnings on reducing links
Код PHP на HTML сайты
Я уже пять лет не занимаюсь сайтом, так как работаю по 12 часов. Образование у меня среднее, и по этому нет нормальной работы. Если бы сайт приносил по 100$ в месяц, я бы добавлял по 50 статей каждый месяц. Если отправите пожертвования, я оставлю Ваши имена и фамилии в списке благодетелей !
Bitcoin: 1AP3JCZVFpHzZwcAyNztbrbFFiLdnKbY1j
Litecoin LfHXHz4k6LnDNNvCodd5pj9aW4Qk67KoUD
Dogecoin D9HHvKNFZxRhjtoh6uZYjMjgcZewwiUME9
Есть также другие кошельки.
Категория: Программирование, Сборка программ
Комментарии |