gnu-config
Набор скриптов и утилит, являющихся частью GNU Build System, которые предоставляют стандартизированный способ определения характеристик системы и создания переносимых configure-скриптов. Эти инструменты автоматически определяют архитектуру системы, доступные компиляторы, библиотеки и другие параметры, необходимые для настройки сборки программного обеспечения под различные Unix-подобные платформы.
Особенности
- автоматическое определение характеристик системы (архитектура, компиляторы, библиотеки, доступные функции);
- генерация переносимых configure-скриптов для адаптации сборки к разным платформам;
- поддержка кросс-компиляции и сборки для различных целевых систем;
- интеграция с инструментами GNU Build System (autoconf, automake, libtool).
Основные компоненты
GNU Config состоит из набора скриптов и макросов, которые используются для создания и выполнения configure-скриптов, адаптирующих сборку программного обеспечения к конкретной системе (подробнее с документацией можно ознакомиться здесь).
Скрипты определения системы
Основные скрипты config.guess и config.sub используются для определения характеристик системы в стандартизированном формате GNU triplet. Эти скрипты являются фундаментальными компонентами системы, обеспечивая единообразное определение архитектуры и операционной системы на различных платформах.
Ключевые скрипты:
config.guess— автоматическое определение типа системы, на которой запускается скрипт;config.sub— нормализация и валидация спецификаторов системы (канонические имена);install-sh— переносимый скрипт для установки файлов (замена команды install);mkinstalldirs— создание иерархии директорий с установкой правильных прав доступа;depcomp— управление зависимостями компиляции для различных компиляторов;compile— обёртка для компиляторов, обеспечивающая единообразное поведение;ylwrap— обёртка для генераторов лексических анализаторов (lex/yacc).
Макросы проверки системы
Autoconf предоставляет сотни макросов для проверки возможностей системы, которые используются в файлах configure.ac для создания настраиваемых скриптов сборки. Эти макросы позволяют автоматически определять доступные функции, библиотеки и системные характеристики.
Основные категории макросов:
- Проверка компиляторов:
AC_PROG_CC,AC_PROG_CXX,AC_PROG_F77; - Проверка библиотек:
AC_CHECK_LIB,AC_SEARCH_LIBS; - Проверка заголовочных файлов:
AC_CHECK_HEADERS,AC_CHECK_HEADER; - Проверка функций:
AC_CHECK_FUNCS,AC_CHECK_FUNCTION; - Проверка типов данных:
AC_CHECK_TYPES,AC_TYPE_SIZE_T; - Проверка структур:
AC_CHECK_MEMBERS; - Настройка параметров сборки:
AC_ARG_ENABLE,AC_ARG_WITH.
Интеграция с pkg-config
GNU Config может интегрироваться с pkg-config для автоматического обнаружения зависимостей и получения флагов компиляции. Эта интеграция упрощает управление внешними библиотеками и обеспечивает правильную настройку параметров сборки.
Функции интеграции:
PKG_CHECK_MODULES— проверка наличия и версий библиотек через pkg-config;- Автоматическое добавление флагов компиляции и линковки;
- Поддержка статических и динамических библиотек;
- Проверка совместимости версий зависимостей.
Поддержка кросс-компиляции
GNU Build System предоставляет развитую поддержку кросс-компиляции, позволяя собирать программное обеспечение для целевых платформ, отличных от системы сборки. Это особенно важно для разработки под встраиваемые системы и различные архитектуры процессоров.
Механизмы кросс-компиляции:
- Спецификация хоста и цели:
--host,--build,--targetпараметры configure; - Настройка инструментов: автоматическое определение или указание кросс-компиляторов;
- Проверки во время выполнения: разделение проверок для системы сборки и целевой системы;
- Поддержка эмуляции: возможность запуска тестов через эмулятор (qemu и др.);
- Инструменты обёртки: адаптация путей к компиляторам и системным утилитам.
Интеграция и использование
GNU Config и GNU Build System широко используются в open-source сообществе для обеспечения переносимости программного обеспечения между различными Unix-подобными системами. Они интегрируются в процесс разработки через стандартные файлы configure.ac и Makefile.am.
Типичные сценарии использования:
- Создание переносимых configure-скриптов для open-source библиотек и приложений;
- Автоматическая настройка параметров сборки для различных дистрибутивов Linux;
- Кросс-компиляция для встраиваемых систем и различных архитектур процессоров;
- Управление сложными зависимостями в крупных проектах;
- Стандартизация процесса сборки и установки программного обеспечения.