В этой стетье речь пойдет о том, как создать скрипт .configure для собственного приложения. Ведь мы хотим быть похожи на крутые ПОшины из мира свободного ПО.
Сначала, как полагается, создадим для всех этих делоп папку. В ней создадим папку src для исходников. Собственно исходник у нас будет один! Ведь мы сделаем всего навсего helloworld.
Вот так он выглядит:
#include <config.h> #include <stdio.h> int main (void) { puts ("Hello World!"); puts ("This is " PACKAGE_STRING "."); return 0; }
Вполне обычный такой хелло ворд.
Для использования automake нам нужен будет скрипт configure.ac. Но чтобы его написать нужно что-то знать. А поскольку мы нифига не знаем, создаем его автоматически:
$ autoscan
Эта утилита просканирует файлы, которые есть в наличии и исходя из собственных соображений создаст файл configure.scan. Его то мы и переименуем в configure.ac:
$ mv configure.scan configure.ac
Теперь его немножно подредактируем. Укажем в строке:
AC_INIT([FULL-PACKAGE-NAME], [VERSION], [BUG-REPORT-ADDRESS])
Что-то свое:
AC_INIT([blablacode_auto_helloworld], [0.01], [bugs@blablacode.ru])
После AC_INIT добавим
AM_INIT_AUTOMAKE([foreign -Wall -Werror])
А перед AC_OUTPUT:
AC_CONFIG_FILES([Makefile src/Makefile])
Теперь нужно рассказать автоматизированным утилитам, как компилировать наш проект. Для этого нужно создать файлы Makefile.am в каждой поддиректории проекта и в корне.
Makefile.am:
SUBDIRS = src
Тут мы просто указали, что у нас есть папка src.
src/Makefile.am:
bin_PROGRAMS = hello hello_SOURCES = hello.c
Тут мы указали, что для сборки бинарника нам нужен всего один исходник с названием hello.c.
Если хотим добавить библиотеку libcrypt, пишем такое:
hello_LDADD = -lcrypt
Аналогично и все остальные.
Теперь дело за малым.
Выполняем такие команды:
$ aclocal $ autoheader $ automake --add-missing $ autoconf
Теперь все готово. Можно собирать:
$ ./configure $ make
Для того, чтобы создать архивчик с исходниками выполняем такое:
$ make dist
По окончании процедуры компиляции можем запустить, удостоверится:
$ hello Hello World! This is blablacode_auto_helloworld 0.01.
Вот такие дела.