go to the first, previous, next, last section, table of contents.
некоторые примеры пакетовпростой пример, от начала до конца
давайте предположим, что мы только что закончили писать
сначала вам необходимо обновить ваш файл `configure.in',
чтобы вставить в него команды, которые необходимы для работы
am_init_automake(zardoz, 1.0)
поскольку ваша программа не имеет никаких осложняющих факторов (например,
она не использует
теперь вы должны заново создать файл `configure'. но для этого
нужно сказать mv aclocal.m4 acinclude.m4 aclocal autoconf
теперь пришло время написать свой собственный файл `makefile.am' для
программы bin_programs = zardoz zardoz_sources = main.c head.c float.c vortex9.c gun.c zardoz_ldadd = @libobjs@ info_texinfos = zardoz.texi
теперь можно запустить классическая программаgnu hello известен своей классической простотой и многогранностью. в этом разделе показывается, как automake может быть использован с пакетом gnu hello. примеры, приведенные ниже, взяты из последней бета-версии gnu hello, но убран код, предназначенный только для разработчика пакет, а также сообщения об авторских правах. конечно же, gnu hello использует больше возможностей, чем традиционная двухстрочная программа: gnu hello работает с разными языками, обрабатывает ключи командной строки, содержит документацию и набор тестов. gnu hello является глубоким пакетом. вот файл `configure.in' из пакета gnu hello: dnl обработайте этот файл программой autoconf для создания скрипта configure. ac_init(src/hello.c) am_init_automake(hello, 1.3.11) am_config_header(config.h) dnl набор доступных языков. all_linguas="de fr es ko nl no pl pt sl sv" dnl проверка наличия программ. ac_prog_cc ac_isc_posix dnl проверка имеющихся библиотек. dnl проверка наличия заголовочных файлов. ac_stdc_headers ac_have_headers(string.h fcntl.h sys/file.h sys/param.h) dnl проверка библиотечных функций. ac_func_alloca dnl проверка наличия поля st_blksize в структуре stat ac_st_blksize dnl макросы поддержки различных языков am_gnu_gettext ac_output([makefile doc/makefile intl/makefile po/makefile.in \ src/makefile tests/makefile tests/hello], [chmod +x tests/hello]) макросы `am_' предоставляются automake (или библиотекой gettext); остальные макросы является макросами autoconf. файл `makefile.am' в корневом каталоге выглядит следующим образом: extra_dist = bugs changelog.o subdirs = doc intl po src tests как видите, вся работа выполняется в подкаталогах.
каталоги `po' и `intl' автоматически создаются программой
в файле `doc/makefile.am' мы видим строки: info_texinfos = hello.texi hello_texinfos = gpl.texi этого достаточно для сборки, установки и распространения руководства gnu hello. вот содержимое файла `tests/makefile.am': tests = hello extra_dist = hello.in testdata
скрипт `hello' создается в заключение мы приведем содержимое `src/makefile.am', где и выполняется вся настоящая работа: bin_programs = hello hello_sources = hello.c version.c getopt.c getopt1.c getopt.h system.h hello_ldadd = @intllibs@ @alloca@ localedir = $(datadir)/locale includes = -i../intl -dlocaledir=\"$(localedir)\" компиляция программ etags и ctags
вот другой, более изощренный пример. он показывает, как собрать две
программы ( bin_programs = etags ctags ctags_sources = ctags_ldadd = ctags.o etags.o: etags.c $(compile) -detags_regexps -c etags.c ctags.o: etags.c $(compile) -dctags -o ctags.o -c etags.c
заметьте, что переменная
переменная
вышеприведенные правила не работают в том случае, если ваш компилятор не
умеет одновременно работать с ключами `-c' и `-o'. самым
простым способом исправить это недоразумение является введение
поддельной зависимости (для того, чтобы избежать проблем с параллельной
версией etags.o: etags.c ctags.o $(compile) -detags_regexps -c etags.c ctags.o: etags.c $(compile) -dctags -c etags.c && mv etags.o ctags.o эти явные правила также не работают, если используется де-ansi-фикация (see section автоматическая де-ansi-фикация). поддержка де-ansi-фикации требует немного больше работы: etags._o: etags._c ctags.o $(compile) -detags_regexps -c etags.c ctags._o: etags._c $(compile) -dctags -c etags.c && mv etags._o ctags.o go to the first, previous, next, last section, table of contents. |