Main Page
Статьи Компоненты Ссылки Разное

Make-файлы для Kylix

Андрей Боровский, kylixportal@narod.ru

Linux – операционная система с общедоступными исходными текстами, и неудивительно, что скомпилировать приложение, которое написал кто-то другой, в этой системе не просто, а очень просто. Распаковываем .tar.gz архив, переходим во вновь созданный каталог, и даем команду make. Все дальнейшее выполняется автоматически.

Утилита make является частью мощного набора инструментов, предназначенного для облегчения распространения машинно- и платформо-независимых приложений. Сборка приложений с помощью make фактически является стандартом в системах Linux и FreeBSD. Все это так, скажете вы, но

Зачем make-файлы Kylix-программистам?

Действительно, главная функция make заключается в организации сборки проектов, состоящих из большого числа исходных файлов. Но управление проектами Kylix реализовано в рамках самого средства разработки. Так зачем нам нужна утилита make?

Есть три причины, побуждающие Kylix–программистов использовать make-файлы. Во-первых, утилита make позволяет выполнять чрезвычайно быстро сборку приложений из уже готовых исходных текстов. Ввести одну команду проще, чем запускать графическую IDE. Во-вторых, использование make-файлов дает пользователям вашей программы, собирающим ее из исходных текстов, привычный интерфейс, стандартный для Linux. Распространение Kylix-программ в виде исходных текстов выглядит не так уж нереально, если учесть, что компилятор dcc, которым мы воспользуемся, входит в состав бесплатного Kylix Open Edition. В-третьих, многие утилиты Linux рассчитаны на работу с утилитой make. Это касается, например, менеджера пакетов rpm. Если вы собираетесь распространять свое приложение в rpm пакетов, make файлы будут вам весьма полезны.

Как работает утилита make?

После запуска make ищет в каталоге, в котором она была запущена, файл с названием Makefile и выполняет его. Make-файлы очень похожи на файлы сценариев оболочки. Также как и в файлах оболочки, в make-файлах можно определять переменные и задавать последовательности команд. Основное отличие make-файлов заключается в наличии в них нескольких разделов (target rules). Если команда make дана без параметров, утилита выполняет раздел all соответствующего make-файла. В качестве параметра команде make можно указать имя раздела, который следует выполнить. Внутри раздела можно вызывать другие разделы наподобие вызовов подпрограмм. Каждый раздел состоит из объявления и описания. Объявление включает в себя имя раздела и исходные параметры ( в англоязычных руководствах - targets). В качестве исходных параметров могут выступать имена разделов или файлов. Описание раздела содержит команды, выполняемые в разделе.

Пример make-файла

Утилита 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 Андрей Наумович Боровский. Воспроизведение возможно только с разрешения автора.

Используются технологии uCoz