Autoconf - Файлы инициализации и выходные файлы
Go to the first, previous, next, last section, table of contents.
Файлы инициализации и выходные файлы
@anchor{Setup}
Скриптам, созданным Autoconf, нужна некоторая инициализационная информация, как то: где найти исходные тексты пакета; какие выходные файлы создавать. В нижеследующей главе описана инициализация и создание выходных файлов.
Нахождение ввода configure
@anchor{Input}
Каждый скрипт configure
должен первым делом вызвать макрос
AC_INIT
. Единственный обязательный макрос -- AC_OUTPUT
(see section Создание выходных файлов).
- Macro: AC_INIT (unique-file-in-source-dir)
-
Обрабатывает аргументы командной строки и ищет каталог с исходными
текстами. unique-file-in-source-dir--- это некоторый файл в каталоге
с исходными текстами пакета;
configure
проверяет существование этого файла, чтобы убедиться, что это именно тот каталог с исходными текстами, какой нужно. Иногда люди указывают неверный каталог с исходными текстами, используя ключ командной строки `--srcdir'; эта проверка позволяет не допускать таких инцидентов. Для детальной информации See section Запуск скриптовconfigure
.
Пакетам, которые выполняют ручную настройку или используют программу
install
, может понадобиться указать скрипту configure
,
где можно найти
другие скрипты командного процессора. Это выполняется с помощью вызова
макроса AC_CONFIG_AUX_DIR
, хотя используемые по умолчанию значения
в большинстве случаев будут правильными.
- Macro: AC_CONFIG_AUX_DIR(dir)
-
Использует скрипты `install-sh', `config.sub', `config.guess' и
Cygnus-версию
configure
, которые располагаются в каталоге dir. Эти вспомогательные файлы используются при конфигурировании. Значение dir может быть задано либо абсолютным путем, либо путем относительно `srcdir'. Значением по умолчанию является первый из каталогов `srcdir', `srcdir/..' или `srcdir/../..', в котором будет найден файл `install-sh'. Проверка наличия других файлов не производится, так что использованиеAC_PROG_INSTALL
не требует включения в дистрибутив других вспомогательных файлов. Также проверяется наличие файла `install.sh', но это имя является устаревшим, поскольку некоторые программыmake
имеют правило, которое создает файл `install' из этого файла, в случае если `Makefile' отсутствует.
Создание выходных файлов
@anchor{Output}
Каждый скрипт configure
, созданный Autoconf, должен заканчиваться
вызовом макроса AC_OUTPUT
. Этот макрос создает файлы `Makefile'
и, может быть, дополнительные файлы, которые являются результатом
конфигурации. Еще одним обязательным макросом является AC_INIT
(see section Нахождение ввода configure
).
- Macro: AC_OUTPUT ([file... [, extra-cmds [, init-cmds]]])
-
Создает выходные файлы. Вызовите этот макрос один раз в конце файла
`configure.in'. Аргумент file... является списком
выходных файлов через пробел; этот список может быть пустым. Этот макрос создает
каждый из файлов `file', копируя входной файл (который по умолчанию
называется `file.in') и подставляя значения выходных переменных.
Для более детального описания использования выходных переменных
See section Подстановки в файлах Makefile.
Для детального описания того, как создавать
такие переменные See section Установка выходных переменных. Этот макрос создает
каталог,
в котором находится файл, если этот каталог не существует (но не создает
родительские каталоги для этого каталога). Обычно таким образом создаются
файлы `Makefile', но можно указать также и другие файлы, такие
как `.gdbinit'.
Если вызывались макросы
AC_CONFIG_HEADER
,AC_LINK_FILES
илиAC_CONFIG_SUBDIRS
, то этот макрос также создает файлы, указанные в аргументах этих макросов.Типичный вызов
AC_OUTPUT
выглядит примерно так:AC_OUTPUT(Makefile src/Makefile man/Makefile X/Imakefile)
Вы можете переопределить имена входных файлов, добавив к file список входных файлов, который разделен двоеточием. Например:
AC_OUTPUT(Makefile:templates/top.mk lib/Makefile:templates/lib.mk) AC_OUTPUT(Makefile:templates/vars.mk:Makefile.in:templates/rules.mk)
Это позволит вам сохранить имена файлов в формате MS-DOS, или для добавления стандартных кусков кода кода в начало или конец файла.
В параметре extra-cmds можно указать команды, которые будут вставлены в файл `config.status' и сработают после того, как было сделано все остальное. В параметре init-cmds можно указать команды, которые будут вставлены непосредственно перед extra-cmds, причем
configure
выполнит в них подстановку переменных, команды и обратных слэшей. Аргумент init-cmds можно использовать для передачи переменных изconfigure
в extra-cmds. Если был вызван макросAC_OUTPUT_COMMANDS
, то команды, переданные ему в качестве аргумента, выполняются прямо перед командами, переданными макросуAC_OUTPUT
.
- Macro: AC_OUTPUT_COMMANDS (extra-cmds [, init-cmds])
-
Задает дополнительные команды командного процессора, которые выполняются
в конце `config.status', а также команды для инициализации
переменных в
configure
. Этот макрос можно вызывать несколько раз. Вот нереальный пример:fubar=27 AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.], fubar=$fubar) AC_OUTPUT_COMMANDS([echo this is another, extra, bit], [echo init bit])
Если вам нужно запустить make
в подкаталогах, то это следует
делать с помощью переменной MAKE
. Большинство версий программы
make
устанавливают значение переменной MAKE
равным имени
программы make
с дополнительно заданными ключами. (Но многие
версии не включаются сюда значения переменных, заданных в командной
строке, поэтому они не передаются автоматически). Некоторые старые версии команды
make
не устанавливают эту переменную. Следующий макрос позволяет
вам использовать переменную MAKE
даже таких старых версий.
- Macro: AC_PROG_MAKE_SET
-
Если
make
определяет переменнуюMAKE
, то переменнаяSET_MAKE
получает пустое значение. Иначе, определяется переменнаяSET_MAKE
со значением `MAKE=make'. Для переменнойSET_MAKE
вызывается макросAC_SUBST
.
Для использования данного макроса поместите следующую строку в каждый из
файлов `Makefile.in', в котором производится запуск MAKE
для подкаталогов:
@SET_MAKE@
Подстановки в файлах Makefile
@anchor{Makefile Substitutions}
Каждый подкаталог дистрибутива, который содержит что либо, что должно
компилироваться или устанавливаться, должен поставляться с файлом
`Makefile.in', из которого configure
создаст файл
`Makefile' для данного каталога. Для создания `Makefile',
configure
выполнит простую подстановку переменных, заменяя
вхождения `@variable@' в файле `Makefile.in' на
значения, которые определены configure
для данной
переменной. Переменные, которые подставляются в выходных файлах таким
способом, называются выходными переменными (output variables). Они
являются обычными переменными командного процессора, которые
устанавливаются в configure
. Для того, чтобы configure
подставлял в выходных файлах определенную переменную, необходимо вызвать
макрос AC_SUBST
с именем переменной в качестве аргумента. Любое
вхождение `@variable@' для других переменных остается
неизмененным. Для получения дополнительной информации о создании
выходных переменных с помощью макроса AC_SUBST
See section Установка выходных переменных.
Пакеты программного обеспечения, использующие скрипт configure
, должны
распространяться с файлами `Makefile.in', но не с файлами `Makefile';
таким образом, пользователь должен перед компиляцией сконфигурировать
программный пакет так, чтобы он соответствовал используемой системе.
See section `Makefile Conventions' in The GNU Coding Standards, для получения информации о том, что можно помещать в файлы `Makefile'.
Предварительная установка выходных переменных
@anchor{Preset Output Variables}
Некоторые выходные переменные заранее устанавливаются макросами Autoconf. Некоторые макросы Autoconf устанавливают дополнительные выходные переменные, которые упомянуты в описаниях этих макросов. Полный список выходных переменных находится в section Индекс выходных переменных. See section `Variables for Installation Directories' in The GNU Coding Standards, для дополнительной информации о переменных с именами, которые заканчиваются на `dir'.
- Variable: bindir
- Каталог в который устанавливаются исполняемые программы, которые запускают пользователи.
- Variable: configure_input
-
Комментарий, сообщающий что файл был автоматически создан скриптом
configure
и выдает имя входного файла.AC_OUTPUT
добавляет строку комментария, содержащую эту переменную, в начало каждого создаваемого файла `Makefile'. Для других файлов вы должны сослаться на эту переменную в комментарии в заголовке каждого входного файла. Например, входной скрипт командного процессора должен начинаться примерно так:#! /bin/sh # @configure_input@
Наличие этой строки также напоминает людям, редактирующим этот файл, что перед использованием его необходимо обработать с помощью
configure
.
- Variable: exec_prefix
- Префикс указывающий, куда будут устанавливаться файлы, зависящие от архитектуры.
- Variable: libexecdir
- Каталог, в который устанавливаются исполняемые файлы, запускаемые другими программами.
- Variable: localstatedir
- Каталог, куда будут устанавливаться изменяемые файлы данных для данной машины.
- Variable: oldincludedir
- Каталог, куда будут устанавливаться заголовочные файлы, для не-gcc компиляторов.
- Variable: sharedstatedir
- Каталог в который устанавливаются изменяемые, независящие от архитектуры файлы данных.
- Variable: sysconfdir
- Каталог, в который устанавливаются неизменяемые файлы данных для данной машины.
- Variable: top_srcdir
-
Каталог верхнего уровня, содержащий исходный код пакета. В каталоге
верхнего уровня эта переменная совпадает с
srcdir
.
- Variable: CFLAGS
-
Ключи оптимизации и отладочной информации для компилятора C. Если эта
переменная не установлена в среде при запуске
configure
, то значение по умолчанию устанавливается при вызове макросаAC_PROG_CC
(или равно пустому значению, если вы не вызываете этот макрос).configure
использует эту переменную при компиляции программ для тестирования возможностей компилятора C.
- Variable: CPPFLAGS
-
Каталоги поиска заголовочных файлов (`-Idir') и любые другие
ключи для препроцессора и компилятора C. Если эта переменная не
установлена в среде при запуске
configure
, то значение по умолчанию равно пустому значению.configure
использует эту переменную при компиляции программ или обработке препроцессором для тестирования возможностей компилятора C.
- Variable: CXXFLAGS
-
Ключи оптимизации и отладочной информации для компилятора C++. Если эта
переменная не установлена в среде при запуске
configure
, то значение по умолчанию устанавливается при вызове макросаAC_PROG_CXX
(или равно пустому значению, если вы не вызываете этот макрос).configure
использует эту переменную при компиляции программ для тестирования возможностей компилятора C++.
- Variable: FFLAGS
-
Ключи оптимизации и отладочной информации для компилятора Fortran 77. Если эта
переменная не установлена в среде при запуске
configure
, то значение по умолчанию устанавливается при вызове макросаAC_PROG_F77
(или равно пустому значению, если вы не вызываете этот макрос).configure
использует эту переменную при компиляции программ для тестирования возможностей компилятора Fortran 77.
- Variable: DEFS
-
Ключи `-D', передаваемые компилятору C. Если вызывается макрос
AC_CONFIG_HEADER
, тоconfigure
заменяет вхождения `@DEFS@' на `-DHAVE_CONFIG_H' (see section Заголовочные файлы конфигурации). Эта переменная не определена во время выполнения тестовconfigure
, она определяется только при создании выходных файлов. See section Установка выходных переменных, для описания того, как получить результаты предыдущих тестов.
- Variable: LDFLAGS
-
Ключ для удаления отладочной информации (`-s'), а также другие
ключи для компоновщика. Если не установлена в среде при запуске
configure
, то по умолчанию имеет пустое значение.configure
использует эту переменную при компоновке программ для тестирования возможностей С.
Каталоги сборки программ
@anchor{Build Directories}
Вы можете поддерживать одновременную компиляцию пакета программного обеспечения для различных архитектур из одной и той же копии исходного кода. Объектные файлы для каждой из архитектур хранятся в отдельных каталогах.
Для поддержки этого make
использует переменную VPATH
для
поиска файлов, которые находятся в каталоге с исходными текстами. Такая
возможность
поддерживается GNU make
и большинством других программ
make
свежих версий. Старые версии программы make
не
поддерживают переменную VPATH
; при их использовании
исходные тексты должны находиться в том же каталоге, что и объектные
файлы.
Для поддержки VPATH
каждый файл `Makefile.in' должен
содержать две строки, которые могут выглядеть следующим образом:
srcdir = @srcdir@ VPATH = @srcdir@
Не надо устанавливать VPATH
в значение другой переменной,
например `VPATH = $(srcdir)', поскольку некоторые версии
make
не выполняют подстановку переменных для
VPATH
.
configure
подставляет правильное значение srcdir
при
создании файла `Makefile'.
Не используйте переменную $<
программы make
, которая
разворачивается в имя файла с полным путем (найденным с помощью
VPATH
), причем только в явных правилах. (Неявные правила,
например, `.c.o', сообщают, как создать файл `.o' из файла
`.c'.) Некоторые версии make
не устанавливают $<
в
явных правилах; они подставляют вместо него пустое значение.
Вместо этого командные строки`Makefile' всегда должны ссылаться на файлы с исходными текстами, с добавлением к ним префикса `$(srcdir)/'. Например:
time.info: time.texinfo $(MAKEINFO) $(srcdir)/time.texinfo
Автоматическая пересборка
@anchor{Automatic Remaking}
Вы можете поместить правила, упомянутые ниже, в файл `Makefile.in' верхнего уровня пакета, для того чтобы автоматически обновлять информацию о конфигурации при изменении файлов конфигурации. Этот пример использует все дополнительные файлы, такие как `aclocal.m4', а также то, что относятся к заголовочным файлам конфигурации. Уберите из правила для `Makefile.in' файлы, не использующиеся в вашем пакете.
Префикс `${srcdir}/' добавлен из-за ограничений механизма
использования VPATH
.
Файлы `stamp-' являются необходимыми, поскольку время последнего
изменения файлов `config.h.in' и `config.h' останется прежним,
если пересоздание этих файлов не изменит их содержимого. Эта возможность
позволяет избежать ненужной перекомпиляции. Вы должны включить
файл `stamp-h.in' в дистрибутив вашего пакета, так что make
будет считать `config.h.in' обновленным. На некоторых старых
системах BSD, команда touch
или любая другая, создающая файл
нулевой длины, не обновляет время изменения этого файла, так что
используйте для правильной работы команду echo
.
${srcdir}/configure: configure.in aclocal.m4 cd ${srcdir} && autoconf # autoheader мог не изменить config.h.in, так что обновить дату stamp-файла. ${srcdir}/config.h.in: stamp-h.in ${srcdir}/stamp-h.in: configure.in aclocal.m4 acconfig.h \ config.h.top config.h.bot cd ${srcdir} && autoheader echo timestamp > ${srcdir}/stamp-h.in config.h: stamp-h stamp-h: config.h.in config.status ./config.status Makefile: Makefile.in config.status ./config.status config.status: configure ./config.status --recheck
Вдобавок вы должны передать `echo timestamp > stamp-h' в аргументе
extra-cmds макросу AC_OUTPUT
, так что
`config.status' будет гарантировать, что файл `config.h' будет
рассматриваться как обновленный. See section Создание выходных файлов, для дополнительной
информации о AC_OUTPUT
.
See section Воссоздание конфигурации, где описаны дополнительные примеры обработки конфигурационных зависимостей.
Заголовочные файлы конфигурации
@anchor{Configuration Headers}
Когда пакет производит тестирование большого количества символов
препроцессора C, то командная строка ключей `-D', передаваемых
компилятору, может получиться достаточно длинной. Это вызывает две
проблемы. Первая заключается в том, что вывод результатов команды
make
будет тяжело читать в поисках ошибок. Вторая и более
серьезная заключается в том, что длина командной строки может
превысить предельную длину командной строки в некоторых операционных
системах. В качестве альтернативы передаче компилятору ключей `-D',
скрипты configure
могут создавать заголовочные файлы C, которые
содержат директивы `#define'. Макрос AC_CONFIG_HEADER
выбирает этот способ выдачи результатов. Макрос должен быть вызван сразу
после вызова AC_INIT
.
Пакет должен подключить с помощью #include
заголовочный файл
настройки до подключения остальных заголовочных файлов, чтобы избежать
несовместимости в объявлениях (например, если этот файл переопределяет
const
). Используйте директиву `#include <config.h>' вместо
`#include "config.h"', и передайте компилятору C
ключ `-I.' (или `-I..', смотря где находится
файл `config.h'). Таким образом, даже если сам каталог с исходными
текстами сконфигурирован (например, для создания дистрибутива), то
другие сборочные каталоги можно будет сконфигурировать, не используя при
этом файл `config.h' и каталога с исходными текстами.
- Macro: AC_CONFIG_HEADER (header-to-create ...)
-
Заставляет
AC_OUTPUT
создать файлы с именами из разделенного пробелами списка header-to-create, которые будут содержать директивы#define
препроцессора C, и заменить `@DEFS@' в созданных файлах на `-DHAVE_CONFIG_H' вместо значенияDEFS
. Обычным значением для header-to-create является `config.h'.Если header-to-create уже существует и его содержимое не отличается от того, что в него хотят поместить, то он остается неизмененным. Это позволяет вносить некоторые изменения в конфигурацию без ненужной перекомпиляции объектных файлов, которые зависят от данных заголовочных файлов.
Обычно входной файл называется `header-to-create.in'; однако вы можете переопределить имя входного файла, добавив к header-to-create список входных файлов, разделенный двоеточием. Примеры:
AC_CONFIG_HEADER(defines.h:defines.hin) AC_CONFIG_HEADER(defines.h:defs.pre:defines.h.in:defs.post)
Это позволяет вам сохранить имена в виде, приемлемом для использования в MS-DOS, а также для добавления стандартных кусков кода к файлам.
Шаблоны заголовочных файлов
@anchor{Header Templates}
Ваш дистрибутив должен содержать файл шаблона, который должен выглядеть
так, как будет выглядеть окончательный заголовочный файл, включая
комментарии, но при этом все значения директив #define
в нем
будут установлены по умолчанию. Например,
предположим, что ваш файл `configure.in' производит следующие
вызовы:
AC_CONFIG_HEADER(conf.h) AC_CHECK_HEADERS(unistd.h)
Для этого примера необходимо вставить в `conf.h.in' нижеследующий
код. В системах, в которых есть `unistd.h',
configure
заменит 0 на 1. В других системах эта строка останется
неизмененной.
/* Определить со значением 1 если у вас есть unistd.h. */ #define HAVE_UNISTD_H 0
Если ваш код проверяет конфигурацию, используя директиву
препроцессора #ifdef
вместо #if
, то значение по умолчанию
может быть удалено директивой #undef
вместо определения
значения. В системах в которых имеется файл `unistd.h',
configure
изменит вторую строку на `#define HAVE_UNISTD_H
1'. В других системах эта строка будет закомментирована (в случае, если
система предопределяет этот символ).
/* Определяется, если в системе есть unistd.h. */ #undef HAVE_UNISTD_H
Использование autoheader
для создания `config.h.in'
@anchor{Invoking autoheader}
Программа autoheader
может создать шаблон файла, содержащего
директивы `#define', для использования с configure
. Если
`configure.in' использует AC_CONFIG_HEADER(file)
, то
autoheader
создает `file.in'; если в качестве
аргумента задано несколько имен файлов, то используется только первое
имя. В противном случае autoheader
создаст файл `config.h.in'.
Если вы зададите аргумент программе autoheader
, то она будет
считывать данные из этого файла, а не из файла `configure.in' и
будет выводить данные в поток стандартного вывода вместо
`config.h.in'. Если вы зададите autoheader
аргумент
`-', то программа будет считывать данные со стандартного ввода
вместо `configure.in' и выдавать результаты на стандартный вывод.
autoheader
сканирует файл `configure.in' и
определяет, какие символы препроцессора C могут быть определены в нем.
Программа копирует комментарии и директивы #define
и #undef
из файла с именем `acconfig.h', который поставляется вместе с Autoconf.
Программа также использует файл с именем `acconfig.h' из текущего
каталога, если он присутствует. Если вы определите с помощью макроса
AC_DEFINE
дополнительные символы, то вы должны создать этот файл с
записями для них. Для символов, определенных макросами
AC_CHECK_HEADERS
, AC_CHECK_FUNCS
, AC_CHECK_SIZEOF
или AC_CHECK_LIB
, программа autoheader
сама создает комментарии
и директивы #undef
, а не копирует их из файла, поскольку
количество возможных символов фактически бесконечно.
Файл, который создается autoheader
, содержит в основном директивы
#define
и #undef
и комментарии к ним. Если
`./acconfig.h' содержит строку `@TOP@', то autoheader
копирует строки, которые находятся выше строки `@TOP@', прямо в
заголовок создаваемого файла. Аналогично, если `./acconfig.h' содержит
строку `@BOTTOM@', то autoheader
скопирует строки, расположенные
сразу после этой строки, в конец создаваемого файла. Можно не
использовать как `@TOP@', так и `@BOTTOM@'.
Другой способ добиться точно такого же результата -- создать
в текущем каталоге файлы `file.top' (обычно
`config.h.top') и/или `file.bot'. Если эти файлы
существуют, то autoheader
копирует их содержимое в начало и в конец
выводимых данных. Их использование не рекомендуется, поскольку имена этих
файлов содержат две точки и не могут применяться в MS-DOS; также это
увеличивает содержимое каталога еще на два файла. Но если вы воспользуетесь
ключом `--localdir=dir' для использования `acconfig.h'
находящегося в другом каталоге, то эти файлы позволят вам вставлять
произвольные куски кода в каждый конкретный файл `config.h.in'.
autoheader
распознает следующие ключи командной строки:
--help
-h
- Выдает список ключей командной строки и прекращает работу.
--localdir=dir
-l dir
- Искать файлы `aclocal.m4' и `acconfig.h' (но не файлы `file.top' и `file.bot') в каталоге dir вместо текущего каталога.
--macrodir=dir
-m dir
-
Искать инсталлированные файлы макросов и `acconfig.h' в
каталоге dir. Вы можете также установить переменную среды
AC_MACRODIR
, указывающую на этот каталог; этот ключ переопределяет значение переменной среды. --version
- Выдает номер версии Autoconf и прекращает работу.
Настройка других пакетов, находящихся в подкаталогах
@anchor{Subdirectories}
В большинстве ситуаций для создания
файлов `Makefile' в подкаталогах достаточно вызова макроса
AC_OUTPUT
. Однако скрипты configure
, которые
контролируют более чем один независимый пакет, могут использовать макрос
AC_CONFIG_SUBDIRS
для запуска скриптов configure
для других
пакетов, находящихся в подкаталогах.
- Macro: AC_CONFIG_SUBDIRS (dir ...)
-
Заставляет
AC_OUTPUT
запуститьconfigure
в каждом подкаталоге dir, которые заданы в списке через пробел. Если заданный каталог dir не найден, то сообщение об ошибке не выдается, поэтому скриптconfigure
может производить конфигурацию, даже если часть подкаталогов отсутствует. Если заданный каталог dir содержит файл `configure.in', но не содержитconfigure
, то будет использоваться Cygnus-версия скриптаconfigure
, местонахождение которой определяется макросомAC_CONFIG_AUXDIR
.Скриптам
configure
, находящимся в подкаталогах, передается та же командная строка, что задана текущему скриптуconfigure
, только с некоторыми изменениями, когда это необходимо (например, исправление относительных путевых имен для кэш-файла или каталога с исходными текстами). Этот макрос также устанавливает выходную переменнуюsubdirs
равной списку каталогов `dir ...'. Правила `Makefile' могут использовать эту переменную для определения того, в какие подкаталоги будет осуществляться рекурсивный переход. Этот макрос может вызываться много раз.
Префикс по умолчанию
@anchor{Default Prefix}
По умолчанию configure
задает префикс для устанавливаемых файлов
равным `/usr/local'. Пользователь configure
может выбрать
другой префикс, используя ключи командной строки `--prefix' и
`--exec-prefix'. Есть два способа изменения значения по
умолчанию: при создании configure
и при его запуске.
Некоторые пакеты программного обеспечения могут требовать установки по
умолчанию в каталог, отличный от `/usr/local'. Чтобы изменить
значение по умолчанию, используйте макрос AC_PREFIX_DEFAULT
.
- Macro: AC_PREFIX_DEFAULT (prefix)
- Устанавливает значение префикса установки по умолчанию в значение prefix вместо `/usr/local'.
Для пользователей может быть удобным, чтобы configure
попытался
угадать префикс для установки на основе расположения некоторых программ,
которые уже установлены в системе. Если вы хотите именно этого,
используйте макрос AC_PREFIX_PROGRAM
.
- Macro: AC_PREFIX_PROGRAM (program)
-
Если пользователь не указал префикс для установки (используя ключ
`--prefix'), то попробовать определить значение префикса на основе
поиска program в списке каталогов из
PATH
. Если program найдена, то установить префикс равным родительскому каталогу каталога, в котором находится program; иначе оставить неизмененным значение префикса, указанного `Makefile.in'. Например, если значением program являетсяgcc
, а в путях найдена программа `/usr/local/gnu/bin/gcc', то значением префикса будет `/usr/local/gnu'.
Номера версий в configure
@anchor{Versions}
Следующие макросы используются для работы с номерами версий в скриптах
configure
. Их использование не обязательно.
- Macro: AC_PREREQ (version)
-
Обеспечивает проверку того, что используется достаточно свежая версия
Autoconf. Если версия Autoconf, используемая для создания
configure
, является более старой, чем version, то в стандартный поток сообщений об ошибках выдается сообщение иconfigure
не создается. Например:AC_PREREQ(1.8)
Этот макрос полезен в том случае, если ваш `configure.in' полагается на неочевидное поведение, которое изменилось между версиями Autoconf. Если вам необходимы только недавно добавленные макросы, то
AC_PREREQ
чуть менее полезен, поскольку программаautoconf
и так сообщит пользователю о том, какие макросы не найдены. То же самое случится в том случае, если файл `configure.in' будет обрабатываться версией Autoconf, более старой, чем та, в которой был добавлен макросAC_PREREQ
.
- Macro: AC_REVISION (revision-info)
-
Копирует метки ревизий revision-info в скрипт
configure
, удаляя знаки доллара и двойные кавычки. Этот макрос позволяет вам помещать метки версий из файла `configure.in' вconfigure
, но при этом RCS или CVS не станут изменять их при помещенииconfigure
в репозиторий. Таким образом, вы можете легко определить, какая версия `configure.in' соответствует конкретномуconfigure
.Хорошей идеей является вызов этого макроса перед
AC_INIT
, чтобы номер ревизии располагался в начале и `configure.in', иconfigure
. Для поддержки этого выдачаAC_REVISION
начинается с `#! /bin/sh', подобно обычному началу скриптаconfigure
.Вот пример этой строки в `configure.in':
AC_REVISION($Revision: 1.5 $)dnl
это создает в
configure
строки:#! /bin/sh # From configure.in Revision: 1.30
Go to the first, previous, next, last section, table of contents.