Андрей Боровский,
kylixportal@narod.ruLinux – операционная система с общедоступными исходными текстами, и неудивительно, что скомпилировать приложение, которое написал кто-то другой, в этой системе не просто, а очень просто. Распаковываем .tar.gz архив, переходим во вновь созданный каталог, и даем команду make. Все дальнейшее выполняется автоматически.
Утилита make является частью мощного набора инструментов, предназначенного для облегчения распространения машинно- и платформо-независимых приложений. Сборка приложений с помощью make фактически является стандартом в системах Linux и FreeBSD. Все это так, скажете вы, но
Действительно, главная функция make заключается в организации сборки проектов, состоящих из большого числа исходных файлов. Но управление проектами Kylix реализовано в рамках самого средства разработки. Так зачем нам нужна утилита make?
Есть три причины, побуждающие Kylix–программистов использовать make-файлы.
Во-первых, утилита make позволяет выполнять чрезвычайно быстро сборку приложений из уже готовых исходных текстов. Ввести одну команду проще, чем запускать графическую IDE. Во-вторых, использование make-файлов дает пользователям вашей программы, собирающим ее из исходных текстов, привычный интерфейс, стандартный для Linux. Распространение Kylix-программ в виде исходных текстов выглядит не так уж нереально, если учесть, что компилятор dcc, которым мы воспользуемся, входит в состав бесплатного Kylix Open Edition. В-третьих, многие утилиты Linux рассчитаны на работу с утилитой make. Это касается, например, менеджера пакетов rpm. Если вы собираетесь распространять свое приложение в rpm пакетов, make файлы будут вам весьма полезны.После запуска make ищет в каталоге, в котором она была запущена, файл с названием Makefile и выполняет его.
Make-файлы очень похожи на файлы сценариев оболочки. Также как и в файлах оболочки, в make-файлах можно определять переменные и задавать последовательности команд. Основное отличие make-файлов заключается в наличии в них нескольких разделов (target rules). Если команда make дана без параметров, утилита выполняет раздел all соответствующего make-файла. В качестве параметра команде make можно указать имя раздела, который следует выполнить. Внутри раздела можно вызывать другие разделы наподобие вызовов подпрограмм. Каждый раздел состоит из объявления и описания. Объявление включает в себя имя раздела и исходные параметры ( в англоязычных руководствах - targets). В качестве исходных параметров могут выступать имена разделов или файлов. Описание раздела содержит команды, выполняемые в разделе.Утилита make – инструмент командной строки, и для компиляции с помощью make мы воспользуемся строчным компилятором dcc (это, пожалуй, единственная ситуация, в которой dcc действительно нужен). При работе с dcc, возникает та же проблема переменных окружения, что и с Kylix IDE. Перед запуском компилятора следует установить значения нескольких переменных. Обычно, эти операции выполняет скрипт kylixpath, запускаемый перед запуском компилятора, однако выполнение скрипта kylixpath, в
make-файле не даст никакого эффекта. Причина этого в том, что каждая команда make-файла выполняется утилитой make в отдельном вызове shell. Чтобы обойти эту проблему нам придется создать дополнительный скрипт для запуска компилятора, содержащий следующие команды:source $1/bin/kylixpath $1/bin/dcc -B -U$1/lib -O$1/bin $2 |
Присвойте файлу скрипта имя build.sh и статус исполнимого файла:
chmod build.sh +x
Теперь можно написать make-файл. Далее приводится текст файла Makefile для сборки Kylix-приложения pas2html (файл должен быть размещен в каталоге проекта):
#----------------------------------------------- # pas2html utility makefile # (c) 2002 Andrei Borovsky, kylixportal@narod.ru #----------------------------------------------- #set kylixpath to the kylix directory: kylixpath=/root/kylix2 all: build clean build: pas2html.dpr ./build.sh $(kylixpath) pas2html.dpr clean: rm *.dcu install: mv pas2html /usr/local/bin cp reserved /usr/local/etc |
Переменная kylixpath должна содержать путь к каталогу, в котором установлен Kylix в вашей системе. В разных системах Kylix может быть установлен в разных каталогах, при этом никаких глобальных переменных, содержащих путь, программа не устанавливает. По этой причине, пользователям, собирающим вашу программу при помощи make, придется редактировать make-файл вручную.
Раздел all состоит из одного объявления, в котором вызываются разделы build и clean. Раздел build (сборка) выполняет скрипт build.sh, передавая ему в качестве параметров значение переменной kylixpath и имя файла проекта. В качестве исходного параметра в этом разделе задано имя файла проекта. В случае с Kylix это просто формальность, но вообще за этим стоит очень полезная возможность утилиты make. Перед выполнением раздела make проверяет, изменились ли целевые файлы раздела с момента предыдущего вызова make. Если файлы не изменились, раздел не выполняется. Это позволяет сократить время сборки приложений в процессе отладки, когда изменения вносятся только в отдельные файлы проекта. Строки описания раздела, содержащие команды, должны начинаться с символа табуляции. Раздел clean (очистка) удаляет из каталога проекта файлы, созданные в процессе компиляции. Имена разделов build и clean не являются обязательными.
Раздел install выполняет установку приложения. Таким образом утилиту make можно использовать по стандартной схеме:$ make
$ su
<пароль>
# make install
Можно также выполнить один раздел build:
make build
В этом случае .dcu файлы не будут удалены.
Статья и примеры программ © 2002 Андрей Наумович Боровский. Воспроизведение возможно только с разрешения автора.