Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Система конфигурирования и сборки GNU

Система конфигурирования и сборки GNU

Иан Ланс Тейлор

Начало работы

Решив применить систему конфигурирования и сборки GNU к вашем пакету программ, вы должны написать три файла и вручную запустить несколько утилит для генерации дополнительных файлов.

Написание configure.in

Во-первых, вы должны написать файл `configure.in'. Он является входным для autoconf, и мануал по autoconf детально описывает, как должен выглядеть этот файл.

В своем файле `configure.in' вам следует написать тесты для проверки условий, которые могут изменяться от одной системы к другой. Таких как наличие конкретных заголовочных файлов или функций.

Например, не все системы поддерживают функцию `gettimeofday'. Если вы хотите использовать функцию `gettimeofday', когда она доступна, и использовать какую-то другую функцию, когда первая недоступна, то вы должны проверить ее наличие поместив `AC_CHECK_FUNCS(gettimeofday)' в `configure.in'.

Когда во время сборки запускается этот скрипт конфигурирования, он устанавливает значение макроса препроцессора `HAVE_GETTIMEOFDAY' в 1, если функция `gettimeofday' является доступной, либо не определяет этот макрос совсем, если указанная функция недоступна. Ваш код может использовать `#ifdef' для определения, может ли он безопасно вызывать `gettimeofday'.

Если у вас имеется готовая масса кода, программа `autoscan' может помочь вам найти потенциальные проблемы с портируемостью и, тем самым, тесты конфигурации, которые могут вам понадобиться. Смотрите документацию по autoscan.

Другой удобной утилитой для готовой массы кода является `ifnames'. Она показывает вам все зависимости от препроцессора, которые уже существуют в коде. Смотрите документацию по ifnames.

Кроме тестов на портативность, которые специфичны для вашего конкретного пакета, каждый файл `configure.in' должен содержать следующие макросы:

`AC_INIT'
Этот макрос принимает единственный аргумент, который является именем файла в вашем пакете. Например, `AC_INIT(foo.c)'.
`AC_PREREQ(VERSION)'
Этот макрос является опциональным. Он может использоваться для указания версии `autoconf', которую вы используете. Это предостерегает пользователей от запуска предыдущих версий `autoconf' и, возможно, от получения неправильного скрипта `configure'. Пример: `AC_PREREQ(2.12)'.
`AM_INIT_AUTOMAKE'
Этот макрос принимает два аргумента: имя пакета и номер версии. Например, `AM_INIT_AUTOMAKE(foo, 1.0)'. (Этот макрос не необходим, если вы не используете automake).
`AM_CONFIG_HEADER'
Этот макрос называет заголовочный файл, который будет содержать определения макросов препроцессора во время выполнения. Обычно им является `config.h'. Для включения указанных макросов ваши исходники должны будут использовать `#include "config.h"'. Опционально макрос AM_CONFIG_HEADER может задавать также имя входного файла для указанного заголовочного файла. По умолчанию им является `config.h.in', но такое имя файла плохо понимается файловой системой DOS. Поэтому в некоторых случаях лучше называть этот файл просто `config.in'. В этом случае в `configure.in' обычно пишут следующее:
AM_CONFIG_HEADER(config.h:config.in)
(Если вы не используете automake, то вместо `AM_CONFIG_HEADER' используйте `AC_CONFIG_HEADER').
`AM_MAINTAINER_MODE'
Этот макрос всегда присутствует в скриптах конфигурирования Cygnus. Другие программы могут его использовать или не использовать. Если этот макрос используется, становится доступной опция `--enable-maintainer-mode' для включения автоматической пересборки генерируемых файлов, используемых в системе конфигурирования. Это, разумеется, предполагает, что разработчики будут осведомлены об этой опции и будут ее применять. Если этот макрос не используется, то генерируемые файлы всегда будут пересобираться автоматически. Это может создать проблемы, если в сборочном `PATH' прописаны неправильные версии autoconf, automake или др. (Если вы не используете automake, вам нет нужды использовать этот макрос.)
`AC_EXEEXT'
Этот макрос либо `AM_EXEEXT' всегда присутствуют в скриптах конфигурирования Cygnus. Другие программы могут использовать или не использовать один из них. Этот макрос определяет расширение исполняемых файлов, используемое на хозяйской системе. В системах Unix это пустая строка. В системах Windows это `.exe'. Этот макрос указывает automake использовать нужное расширение файлов при создании программ. Этот макрос не принимает никаких аргументов. Форма `AC_EXEEXT' является более новой. Она является частью патча Cygnus для autoconf, обеспечивающего компиляцию с Visual C++. Старые программы используют вместо нее `AM_EXEEXT'. (Программы, которые не используют automake, не используют соответственно ни `AC_EXEEXT' ни `AM_EXEEXT'.)
`AC_PROG_CC'
Если вы пишете код на C, вам, как правило, нужно будет использовать этот макрос. Он определяет местонахождение компилятора C для использования. Он не принимает каких-либо аргументов. Тем не менее, если файл `configure.in' предназначен для библиотеки, которая должна компилироваться кросс-компилятором, то вы не должны использовать `AC_PROG_CC'. Вместо этого вы должны использовать вариант, который не вызывает макрос `AC_PROG_CC_WORKS'. Примеры можно найти в различных файлах `configure.in' для библиотек, которые компилируются кросс-компиляторами, таких как libiberty или libgloss. Это, по существу, является багом в autoconf и в будущем, возможно, будет исправлено.
`AC_PROG_CXX'
Если вы пишите код C++, вам может понадобиться использование этого макроса. Он находит компилятор C++ для использования. Он не принимает никаких аргументов. Для этого макроса также справедливы комментарии о кросс-компиляторе, приведённые выше для `AC_PROG_CC'.
`AM_PROG_LIBTOOL'
Если вам нужно собрать библиотеки и разрешить им быть разделяемыми, или если вам, напротив, нужно линковать библиотеки, которые были собраны с помощью libtool, то вам понадобится этот макрос. Он нужен для использования libtool. При наличии этого макроса все библиотеки собираются, по умолчанию, как разделяемые. Это умолчание можно изменить с помощью `AM_DISABLE_SHARED', вписанным перед `AM_PROG_LIBTOOL'. Во время сборки этим умолчанием можно управлять с помощью опций `--enable-shared' и `--disable-shared' для configure.
`AC_DEFINE(_GNU_SOURCE)'
Пакеты GNU обычно включают эту строку перед другими функциональными тестами. Это включает при компиляции макрос `_GNU_SOURCE', который управляет заголовочными файлами libc, чтобы предоставить стандартные интерфейсы системы GNU, включающей все расширения GNU. Если этот макрос не определён, некоторые расширения GNU могут оказаться недоступными.
`AC_OUTPUT'
Этот макрос принимает список имен файлов, которые должны стать результатом процесса конфигурирования. Обычно это список из одного или более файлов `Makefile' в различных директориях. Если ваш пакет расположен в единственной директории, вы можете использовать просто `AC_OUTPUT(Makefile)'. Если же вы имеете, например, поддиректорию `lib', то должны использовать `AC_OUTPUT(Makefile lib/Makefile)'.

Если вы хотите использовать в своем файле `configure.in' локально определенный макрос, то должны написать файл `acinclude.m4', который его определяет (если не используется automake, этот файл должен называться `aclocal.m4'). В качестве альтернативы вы можете положить отдельные макросы в поддиректорию `m4' и вписать `ACLOCAL_AMFLAGS = -I m4' в свой файл `Makefile.am' чтобы программа `aclocal' могла их найти.

Различные префиксы макросов указывают, какой утилитой определён тот или иной макрос. Макросы, начинающиеся с `AC_', являются частью autoconf. Макросы, начинающиеся с `AM_', предоставляются automake или libtool.


Назад Вперед
Введение Написание Makefile.am

Перевод: Дмитрий Скоробогатов, 25.11.2011.
Оригинальный текст можно найти по адресу http://www.airs.com/ian/configure/configure_2.html.


Предыдущие публикации:

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2011-11-25 11:41:37

Метки материала: gnu, система конфигурирования, система конфигурирования и сборки, компиляция, проект gnu, по, бесплатные программы, бесплатное по, софт, разработка по, soft, программное обеспечение, software, спо, документация для программиста, программное обеспечение по

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.