Вход:  Пароль:  
FreeSource: Autotools?/hello ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |
Это старая версия Autotools/hello за 2006-10-26 14:53:19..

Внедрение Autotools в hello world!


В этой заметке описываются шаги, которые должен предпринять разработчик, желающий, чтобы его проект уровня “hello world!” использовал систему сборки autotools.

Написание программы


Прежде чем разбираться с вопросом автоматизации сборки своей копии программы “hello, world!” будьте уверены, что вы можете её написать. В любом случае, вот вам пример этой программы на языке Си:


Создание configure.in


Нужно создать файл configure.in, поместив в него необходимые макросы autoconf. После создания этого файла необходимо запустить autoconf для того чтобы сгенерировать скрипт configure.


Те, кто внимательно прочитал всю, или хотя бы бОльшую часть мануала (см. раздел Ссылки), без особых усилий смогут самостоятельно создать configure.in. Для таких же новичков как мы была создана программа autoscan, которая сканирует текущий каталог и создаёт заготовку для будущего configure.in файла. После запуска autoscan найдите в текущем каталоге файл configure.scan


Вот пример configure.scan, который получился у меня:



Переименуйте этот файл в configure.in и отредактируйте.


Все строчки, начинающиеся со знака # являются комментариями. Все комментарии такого вида попадут в генерируемый configure скрипт в неизменном виде. Если же вы хотите, чтобы ваши комментарии не встречались где-либо за рамками configure.in файла, то используйте встроенный макрос m4 — dnl, «который отбрасывает текст вплоть до начала новой строки».


Первым макросом идёт AC_PREREQ. Он указывает, что требуется autoconf версии 2.59 и никак не меньше. Эта зависимость обусловлена тем, что ранее AC_INIT принимал один аргумент, вместо четырёх и autoconf более ранних версий не поймёт наш configure.in Подробнее смотри здесь.


Любой configure.in должен начинаться с макроса AC_INIT и заканчиваться макросом AC_OUTPUT. В качестве аргументов AC_INIT принимает название программы, её версию, и, как необязательный аргумент, ваш email-адрес, куда пользователи смогут отправлять отчеты об ошибках. Не забудьте изменить значения по умолчанию для этих параметров!






Более подробное описание для всех этих макросов вы можете найти в разделе Смотри также.


После всех правок я получил следующий configure.in:



Теперь запустите программу autoconf, а после получившийся configure скрипт:



Уф! Оно работает! :)

Создание Makefile.am и src/Makefile.am


Но работающего скрипта configure недостаточно. Наша цель, чтобы программа также собиралась по команде make и устанавливалась по make install. За это отвечает уже automake. Для него нам потребуется создать два файла: корневой Makefile.am и Makefile.am для каталога src/, в котором и должен располагаться файл hello.c (Не забудьте его переместить.)


Для нашей программы они очень простые:


Makefile.am:


src/Makefile.am:


SUBDIRS сообщает make'у о каталоге src, в который обязательно необходимо «заглянуть» :)


bin_PROGRAMS задаёт имя нашей программы, а позже мы указываем какие исходные файлы нужно будет компилировать. Более нам ничего не нужно указывать — automake сам всё поймёт.


Некоторые изменения также нужно внести в configure.in, чтобы при вызове configure создавались необходимые Makefile'ы:



Объясню подробнее назначение добавленных макросов: AM_INIT_AUTOMAKE сообщает autoconf о том, что мы намерены использовать automake. AC_CONFIG_FILES говорит, что из указанных файлов, с постфиксом .in, нужно создать результирующие файлы с приведёнными именами. Иными словами во время вызова configure из файла Makefile.in будет создаваться Makefile.


Ну, вроде бы и всё. Далее выполните:



После чего будут сгенерированы все нужные Makefile'ы, создан configure скрипт и наша программа готова к распространению. Остался лишь один штрих: make dist и вуаля — hello-1.0.tar.gz готов к использованию и распространению между пользователями.


Смотри также


Ссылки


 
Файлов нет. [Показать файлы/форму]
Комментариев нет. [Показать комментарии/форму]