Простой пример

Простой пример [Вперед] [Вверх] [Назад] [Содержание]
Дальше: Более сложный пример Вверх: Использование automake Назад: Что такое automake

Простой пример

Рассмотрим пример из предыдущей главы, в котором мы уже применили Autoconf. Теперь мы хотим еще и избавиться от необходимости писать Makefile.in вручную. Так как проект очень прост, файл Makefile.am содержит всего две строки:

bin_PROGRAMS = prog
prog_SOURCES = main.c main.h foo.c bar.c

Теперь объясним то, что здесь написано. Во-первых, эти две строки надо толковать не как ``переменным bin_PROGRAMS и prog_SOURCES присвоены соответствующие значения'', а как ``заданы два макроса bin_PROGRAMS и prog_SOURCES с соответствующими параметрами'' (это действительно макросы, так как они инициируют генерацию кода -- можно сказать, ``расширяются'' (expand) до него). Макрос bin_PROGRAMS означает, что конечная цель процесса компиляции -- создание исполняемого файла с именем prog, a параметры макроса prog_SOURCES означают, что исходные тексты будущей программы находятся в файлах main.c, main.h, foo.c и bar.c. В результате процесса генерации Makefile.am будет содержать цели для компиляции каждого исходного .c-файла в объектный модуль, а также цель для конечной сборки программы prog. Кроме того, в Makefile.am войдут и некоторые специальные цели, например tags -- для создания базы данных, позволяющей легко ориентироваться по исходным текстам.

Теперь необходимо неного изменить файл configure.in. В большинстве случаев это делается очень легко -- необходимо только добавить макрос AM_INIT_AUTOMAKE, который имеет два аргумента -- имя программы и номер версии. Модифицированный файл configure.in выглядит так:

dnl Process this file with autoconf to produce a configure script.
AC_INIT(bar.c)
AM_INIT_AUTOMAKE(prog,1.0)

dnl Checks for programs.
AC_PROG_INSTALL
AC_PROG_CC

dnl Checks for libraries.

dnl Checks for header files.
AC_CHECK_HEADER(stdio.h)

dnl Checks for typedefs, structures, and compiler characteristics.

dnl Checks for library functions.
AC_CHECK_FUNC(printf)

AC_OUTPUT(Makefile)

Кроме того, необходимо учесть, что этот макрос не является стандартным Autoconf-макросом и, следовательно, неизвестен на момент генерации скрипта configure, Чтобы этого избежать, нужно поместить определение макроса в файл aclocal.m4, что и достигается запуском программы aclocal.



Dmitry A. Antipov
1999-05-26