Интернет магазин китайских планшетных компьютеров |
|
Компьютеры - Make - Make-файл05 мая 2011Оглавление: 1. Make 2. Современные версии 3. Make-файл Программа make выполняет команды согласно правилам, указанным в специальном файле. Этот файл называется make-файл. Как правило, make-файл описывает, каким образом нужно компилировать и компоновать программу. make-файл состоит из правил и переменных. Правила имеют следующий синтаксис: цель1 цель2 ...: реквизит1 реквизит2 ... команда1 команда2 ... Правило представляет собой набор команд, выполнение которых приведёт к сборке файлов-целей из файлов-реквизита. Правило сообщает make, что файлы, получаемые в результате работы команд являются зависимыми от соответствующих файлов-реквизита. make никак не проверяет и не использует содержимое файлов-реквизита, однако, указание списка файлов-реквизита требуется только для того, чтобы make убедилась в наличии этих файлов перед началом выполнения команд и для отслеживания зависимостей между файлами. Обычно цель представляет собой имя файла, который генерируется в результате работы указанных команд. Целью также может служить название некоторого действия, которое будет выполнено в результате выполнения команд. Строки, в которых записаны команды, должны начинаться с символа табуляции. Рассмотрим несложную программу на Си. Пусть программа program состоит из пары файлов кода main.c и lib.c, а также из одного заголовочного файла defines.h, который подключён в оба файла кода. Поэтому, для создания program необходимо из пар и создать объектные файлы main.o и lib.o, а затем скомпоновать их в program. При сборке вручную требуется дать следующие команды: cc -c main.c cc -c lib.c cc -o program main.o lib.o Если в процессе разработки программы в файл defines.h будут внесены изменения, потребуется перекомпиляция обоих файлов и линковка, а если изменим lib.c, то повторную компиляцию main.о можно не выполнять. Таким образом, для каждого файла, который мы должны получить в процессе компиляции нужно указать, на основе каких файлов и с помощью какой команды он создаётся. Программа make на основе этих данных выполняет следующее:
Если при запуске make явно не указать цель, то будет обрабатываться первая цель в make-файле, имя которой не начинается с символа «.». Для программы program достаточно написать следующий make-файл: program: main.o lib.o cc -o program main.o lib.o main.o lib.o: defines.h Стоит отметить ряд особенностей. В имени второй цели указаны два файла и для этой же цели не указана команда компиляции. Кроме того, нигде явно не указана зависимость объектных файлов от «*.c»-файлов. Дело в том, что программа make имеет предопределённые правила для получения файлов с определёнными расширениями. Так, для цели-объектного файла при обнаружении соответствующего файла с расширением «.c» будет вызван компилятор «сс -с» с указанием в параметрах этого «.c»-файла и всех файлов-зависимостей. Синтаксис для определения переменных: переменная = значение Значением может являться произвольная последовательность символов, включая пробелы и обращения к значениям других переменных. С учётом сказанного, можно модифицировать наш make-файл следующим образом: OBJ = main.o lib.o program: $ cc -o program $ $: defines.h Нужно отметить, что вычисление значение переменных происходит только в момент использования. Например, при сборке цели all из следующего make-файла на экран будет выведена строка «Huh?». foo = $ bar = $ ugh = Huh? all: echo $ Предположим, что к проекту добавился второй заголовочный файл lib.h, который включается только в lib.c. Тогда make-файл увеличится ещё на одну строчку: lib.o: lib.h Таким образом, один целевой файл может указываться в нескольких целях. При этом полный список зависимостей для файла будет составлен из списков зависимостей всех целей, в которых он участвует, создание файла будет производиться только один раз. Просмотров: 2555
|