Autoconf - Ручная настройка
Go to the first, previous, next, last section, table of contents.
Ручная настройка
@anchor{Manual Configuration}
Некоторые типы свойств не могут быть определены автоматически путем
запуска тестовых программ. Например, детали реализации формата объектных
файлов или специальные ключи, которые необходимо передать компилятору
или компоновщику. Вы можете проверить такие свойства используя
специализированные возможности, такие как заставив configure
проверить вывод программы uname
или производя поиск библиотек,
специфических для отдельных систем. Однако Autoconf предоставляет
однообразный метод для обработки неопределяемых свойств.
Указание типа системы
@anchor{Specifying Names}
Подобно другим скриптам GNU configure
, созданные Autoconf скрипты
configure
могут делать заключение основываясь на каноническом
имени типа системы, которое имеет форму:
cpu-company-system
configure
обычно может определить каноническое имя типа системы
на которой он запущен. Для этого он запускает скрипт с именем
config.guess
, который определяет имя, используя команду
uname
или символы определенные препроцессором C.
В качестве альтернативы, пользователь может указать тип системы как
аргумент командной строки скрипта configure
. Это необходимо
сделать, если вы хотите использовать кросс-компиляцию. В большинстве
сложных случаев кросс-компиляции будут вовлечены три типа систем. Для их
указания используются следующие ключи:
--build=build-type
- тип системы на которой настраивается и компилируется пакет (используется редко);
--host=host-type
- тип системы на которой будет запускаться пакет;
--target=target-type
- тип системы для которой утилиты компилятора будут создавать код.
Если пользователь задает configure
неключевой аргумент, то он
используется как значение по умолчанию для всех типов систем, если
только пользователь не указал типы явно для систем с помощью ключей
командной строки. Если типы целевой и собирающей систем не заданы, а
задан тип системы на которой будет запускаться пакет, то они равны
заданному значению. Если вы используете кросс-компиляцию, то вам
необходимо указать в командной строке скрипта configure
имена
используемых вами кросс-утилит, в частности компилятора С, например,
CC=m68k-coff-gcc configure --target=m68k-coff
configure
распознает короткие алиасы для многих типов систем;
например, в командной строке может быть задано имя `decstation'
вместо `mips-dec-ultrix4.2'. configure
запускает скрипт с
именем config.sub
для канонизации алиасов типов систем.
Получение канонического типа системы
@anchor{Canonicalizing}
Следующие макросы делают тип системы доступным для скриптов
configure
. Они запускают скрипт командного процессора
config.guess
для определения значений для каждого из типов
систем, в которых они нуждаются, и которые пользователь не указал в
командной строке. Они запускают config.sub
для канонизации
заданных пользователем псевдонимов. Если вы используете эти макросы, то вы
должны распространять эти два файла вместе с вашим исходным
кодом. See section Создание выходных файлов, для получения информации о макросе
AC_CONFIG_AUX_DIR
, который вы можете использовать для контроля
того, в каком именно каталоге configure
будет искать эти
файлы. Если вы не используете ни один из этих макросов, то
configure
игнорирует заданные ключи `--host',
`--target' и `--build'.
- Macro: AC_CANONICAL_SYSTEM
- Определяет тип системы и устанавливает выходные переменные равными именам канонических типов систем. See section Переменные типов систем, где описано, какие именно переменные устанавливаются этим макросом.
- Macro: AC_CANONICAL_HOST
-
Выполняет часть операций
AC_CANONICAL_SYSTEM
, относящуюся к определению типа системы, на которой будет запускаться пакет. Это все, что необходимо для программ, которые не входят в набор утилит компилятора.
- Macro: AC_VALIDATE_CACHED_SYSTEM_TUPLE (cmd)
- Если в кэш-файле записан тип системы, не совпадающий с текущим, то выполняется команда cmd или печатается стандартное сообщение об ошибке.
Переменные типов систем
@anchor{System Type Variables}
После вызова AC_CANONICAL_SYSTEM
информация о типе системы
содержится в нижеперечисленных выходных переменных. После
AC_CANONICAL_HOST
устанавливаются только те из перечисленных
переменных, чьи имена начинаются на host
.
build
,host
,target
- канонические имена систем;
build_alias
,host_alias
,target_alias
-
имена, указанные пользователем или канонические имена, если был
использован файл
config.guess
; build_cpu
,build_vendor
,build_os
host_cpu
,host_vendor
,host_os
target_cpu
,target_vendor
,target_os
- отдельные части канонического имени (для удобства).
Использование типов систем
@anchor{Using System Type}
Как использовать канонический тип системы? Обычно вы используете его в
одном или нескольких операторах case
в `configure.in' для
выбора специфических для системы файлов C. Затем делает ссылки на
файлы, чьи имена содержат информацию о системе, чтобы они назывались также
своим обобщенным именем, например, `host.h' или `target.c'. Шаблоны
в операторе case
могут использовать специальные символы командного процессора
для группировки нескольких вариантов вместе, например как в таком
фрагменте:
case "$target" in i386-*-mach* | i386-*-gnu*) obj_format=aout emulation=mach bfd_gas=yes ;; i960-*-bout) obj_format=bout ;; esac
- Macro: AC_LINK_FILES (source..., dest...)
-
Заставляет
AC_OUTPUT
сделать ссылку с каждого файла из списка source на соответствующий файл с именем dest. Если это возможно, то создается символьная ссылка, иначе создается жесткая ссылка. Имена dest и source должны быть заданы относительно каталога верхнего уровня с исходными текстами или каталога, в котором происходит сборка. Этот макрос может быть вызван неоднократно.Например, такой вызов:
AC_LINK_FILES(config/${machine}.h config/${obj_format}.h, host.h object.h)
создает в текущем каталоге файл `host.h', который является ссылкой на `srcdir/config/${machine}.h', и `object.h', который является ссылкой на `srcdir/config/${obj_format}.h'.
Вы также можете использовать тип системы, на которой будет запускаться
программа, для поиска утилит кросс-компиляции. See section Общие программы и проверки файлов, для информации о макросе AC_CHECK_TOOL
, который
выполняет это.
Go to the first, previous, next, last section, table of contents.