Сегодня попытался воспользоваться autoconf и automake для автоматической генерации Makefile для сборки проекта.
Исходники на C++, проект довольно старый.
Итак, вот как выглядит схема работы GNU build system:

И теперь маленький туториал по шагам.
Допустим, проект лежит в директории /project. Помещаем в папку /project/src.
Теперь в /project создаем файл Makefile.am со следующей начинкой:
Это сообщит где искать дополнительные make-файлы.
В директории /project/src создаем Makefile.am следующего содержания:
helloprg_PROGRAMS=hello
hello_SOURCES=hello.c
Первая строка – куда копировать бинарники при make install.
Вторая – имя программы
Третья – исходники, которые будут компилироваться. Также все упомянутые тут файлы будут собраны при make dist. Но об этом советую почитать подробнее в доке.
Ок, теперь можно запустить в корне проекта команду
Она создаст нужный нам файл – configure.scan. Переименовываем его в configure.ac и правим:
к примеру на
Также надо добавить директиву
чтобы утилиты создали Makefile.
Также советуют заменить AC_CONFIG_HEADER на AM_CONFIG_HEADER.
Теперь выполним
Он создаст m4 скрипт для выполнения будущего configure.
создаст необходимые заголоки для будущего configure.
Наконец, выполним
-a добавит отсутствующие файлы, -c скопирует их вместо создания симлинки.
А теперь смотрим какие файлы он не создал: NEWS, AUTHORS, ChangeLog, README. Для дальнейшей сборки надо их создать.
И теперь выполняем
Если все прошло успешно – то теперь проект готов, можно делать ./configure && make. А кроме того make dist соберет аккуратный пакетик-архивчик со всеми исходниками и скриптами для сборки.
Ссылки:
autotoolset
The-GNU-Build-System
Tutorial
ЗЫ: я делал это впервые, потому замечаниям буду только рад.
ЗЫ2: задался вопросом – а как бы не описывать руками какие файлы собирать, а использовать некий хитрый макрос для того чтоб оно съело все исходники само?
У GNU make есть такая штука как wildcard:
CPPFILES = $(wildcard *.cc)
gonzo
November 25th, 2007