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

Внедрение 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 и никак не меньше. В случае, если мы попытаемся создать configure скрипт с помощью autoconf более младшей версии мы получим ошибку.


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




TODO: Использование файла config.h?



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


После всех правок я получил следующий 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 задаёт имя нашей программы, а позже мы указываем какие исходные файлы нужно будет компилировать. Более нам ничего не нужно указыва
1000
ть — automake сам всё поймёт.


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



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


TODO: использование дополнительных аргументов макроса AM_INIT_AUTOMAKE для передачи аргументов программе automake?


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



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


Смотри также


Ссылки


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