autotools
Сегодня попытался воспользоваться autoconf и automake для автоматической генерации Makefile для сборки проекта.
Исходники на C++, проект довольно старый.
Итак, вот как выглядит схема работы GNU build system:
И теперь маленький туториал по шагам.
Допустим, проект лежит в директории /project. Помещаем в папку /project/src.
Теперь в /project создаем файл Makefile.am со следующей начинкой:
[cc lang="bash"]
SUBDIRS=src
[/cc]
Это сообщит где искать дополнительные make-файлы.
В директории /project/src создаем Makefile.am следующего содержания:
[cc lang="bash"]
helloprgdir=../
helloprg_PROGRAMS=hello
hello_SOURCES=hello.c
[/cc]
Первая строка - куда копировать бинарники при make install.
Вторая - имя программы
Третья - исходники, которые будут компилироваться. Также все упомянутые тут файлы будут собраны при make dist. Но об этом советую почитать подробнее в доке.
Ок, теперь можно запустить в корне проекта команду
[cc lang="bash"]autoscan[/cc]
Она создаст нужный нам файл - configure.scan. Переименовываем его в configure.ac и правим:
[cc lang="bash"]
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
[/cc]
к примеру на
[cc lang="bash"]
AC_INIT(HELLO WORLD, 0.1, bugs at example.com)
[/cc]
Также надо добавить директиву
[cc lang="text"]
AM_INIT_AUTOMAKE
[/cc]
чтобы утилиты создали Makefile.
Также советуют заменить AC_CONFIG_HEADER на AM_CONFIG_HEADER.
Теперь выполним
[cc lang="bash"]
aclocal
[/cc]
Он создаст m4 скрипт для выполнения будущего configure.
[cc lang="bash"]
autoheader
[/cc]
создаст необходимые заголоки для будущего configure.
Наконец, выполним
[cc lang="bash"]
automake -ac
[/cc]
-a добавит отсутствующие файлы, -c скопирует их вместо создания симлинки.
А теперь смотрим какие файлы он не создал: NEWS, AUTHORS, ChangeLog, README. Для дальнейшей сборки надо их создать.
И теперь выполняем
[cc lang="bash"]
autoconf
[/cc]
Если все прошло успешно - то теперь проект готов, можно делать ./configure && make. А кроме того make dist соберет аккуратный пакетик-архивчик со всеми исходниками и скриптами для сборки.
Ссылки:
autotoolset
The-GNU-Build-System
Tutorial
ЗЫ: я делал это впервые, потому замечаниям буду только рад.
ЗЫ2: задался вопросом - а как бы не описывать руками какие файлы собирать, а использовать некий хитрый макрос для того чтоб оно съело все исходники само?