pkgconf
Программа для настройки флагов компилятора и линковщика для библиотек разработки. Она является совместимой, но функционально расширенной заменой классической pkg-config из freedesktop.org. Включает библиотеку libpkgconf, предоставляющую доступ к функциональности pkgconf для интеграции в другие инструменты, такие как компиляторы и IDE.
Особенности
- полная совместимость с существующими файлами
.pcи большинством опций оригинальной pkg-config; - построение плоского ориентированного графа зависимостей для более эффективного разрешения связей и оптимизации флагов линковки, что помогает избежать избыточного связывания;
- улучшенный алгоритм решения зависимостей, оптимизированный для работы с графами;
- библиотека
libpkgconfсо стабильным ABI и API для создания привязок и встраивания функциональности pkgconf в сторонние инструменты сборки и IDE; - поддержка кросс-компиляции через переменные окружения
PKG_CONFIG_SYSROOT_DIRи механизмы переопределения префиксов (--define-prefix); - возможность фильтрации системных путей включения и библиотек (
PKG_CONFIG_SYSTEM_INCLUDE_PATH,PKG_CONFIG_SYSTEM_LIBRARY_PATH) для более точного контроля над выводимыми флагами.
Основные компоненты
pkgconf состоит из утилиты командной строки и библиотеки libpkgconf (подробнее с документацией можно ознакомиться здесь).
Утилита командной строки
Основной интерфейс для пользователей и систем сборки. Позволяет запрашивать флаги компиляции и линковки, проверять версии библиотек, а также получать детальную информацию о зависимостях.
Основные функции утилиты:
- Получение флагов компиляции:
pkgconf --cflags libraryвозвращает флаги, необходимые для компиляции с использованием указанной библиотеки (например,-I/usr/include/library); - Получение флагов линковки:
pkgconf --libs libraryвозвращает флаги для линковки (например,-L/usr/lib -llibrary); - Проверка существования и версии библиотеки:
pkgconf --exists library,pkgconf --atleast-version 1.0 library. Эти опции используются в скриптах configure для проверки зависимостей; - Работа со статической линковкой: Опция
--staticзаставляет pkgconf включать флаги изRequires.privateиLibs.private, которые необходимы для статической сборки; - Визуализация зависимостей: Опция
--digraphгенерирует представление графа зависимостей в формате Graphviz (DOT), что полезно для отладки и анализа.
Библиотека libpkgconf
libpkgconf предоставляет программный интерфейс для выполнения всех операций, доступных в утилите командной строки. Это позволяет интегрировать логику разрешения зависимостей и генерации флагов непосредственно в инструменты разработки.
Ключевые возможности библиотеки:
- загрузка и парсинг файлов
.pc; - построение и анализ графа зависимостей с учётом версий и конфликтов;
- предоставление фрагментов флагов (CFLAGS, LDFLAGS) с возможностью фильтрации системных путей;
- поддержка различных режимов работы (shared/static, кросс-компиляция).
Управление файлами .pc и переменные окружения
pkgconf ищет файлы с метаданными (с расширением .pc) в директориях, заданных через переменные окружения. Эти файлы содержат информацию о версии библиотеки, её зависимостях, флагах компиляции и линковки.
Ключевые переменные окружения:
PKG_CONFIG_PATH— список дополнительных директорий для поиска.pcфайлов;PKG_CONFIG_LIBDIR— список основных директорий для поиска.pcфайлов (переопределяет встроенные пути по умолчанию);PKG_CONFIG_SYSROOT_DIR— префикс корневой системы (sysroot), добавляемый к путям из.pcфайлов при кросс-компиляции;PKG_CONFIG_SYSTEM_INCLUDE_PATHиPKG_CONFIG_SYSTEM_LIBRARY_PATH— списки системных путей, которые по умолчанию игнорируются при выводе флагов (расширение pkgconf);PKG_CONFIG_DISABLE_UNINSTALLED— запрещает использование.pcфайлов, помеченных какuninstalled.