В течение многих лет я использовал PKG_CHECK_MODULES
и нашел, что это будет очень полезно. Я видел, как люди жаловались, что использование PKG_CHECK_MODULES
вызвало «тонкие ошибки сборки» на разных платформах, но я никогда не обнаружил, что это особенно убедительная причина, чтобы прекратить ее использовать. Тем не менее, я считаю, что обязательство сопровождающего должно отвечать на жалобы пользователей там, где это необходимо, так что это всегда было проблемой. Однако моя основная жалоба с PKG_CHECK_MODULES
заключается в том, что она вызывает сбои там, где она не должна. Если пользователь устанавливает libfoo
в /p/a/t/h
и вызывает сценарий configure
с LDFLAGS=-L/p/a/t/h
, пользователь оправдывается ожиданием, что конфигурация найдет libfoo
. Но пользователь также должен установить PKG_CONFIG_PATH
, чтобы сценарий configure
мог найти foo.pc
, чтобы конфигурация была успешной, и ИМО, которая сломана. Можно было бы вызвать AC_CHECK_LIB
, а затем вызвать только PKG_CHECK_MODULES
, если библиотека не найдена через стандартный механизм, чтобы избежать этой проблемы. Другая проблема заключается в том, что вполне возможно, что PKG_CHECK_MODULES
найдет файл .pc
, в котором информация неточна, что приводит к сбою сборки. В этом случае необходимо вызвать AC_CHECK_LIB
после PKG_CHECK_MODULES
.
Короче говоря, чтобы правильно использовать PKG_CHECK_MODULES
, необходимо вызвать AC_CHECK_LIBS
первый, а затем условно вызвать PKG_CHECK_MODULES
, а затем вызвать AC_CHECK_LIBS
еще раз для проверки информации, найденной PKG_CHECK_MODULES
. Вся эта дополнительная работа со стороны сопровождающего только для того, чтобы облегчить пользователям установку их библиотек в нестандартном расположении, является IMO, абсурдным. Пользователь должен настроить свою цепочку инструментов для поиска библиотек с помощью стандартных механизмов.
- EDIT -
Чтобы уточнить, я не утверждаю, что пакет, который использует библиотеку, которая поощряет использование PKG_CHECK_MODULES
следует избегать использования в их configury. Скорее, я рекомендую, чтобы библиотеки не поощряли его использование и прекращали распространять файлы .pc
. Проблема, которая пытается быть решена с помощью файлов .pc
, лучше решать на более высоком уровне. Автотестами являются не система управления пакетами, и это проблема, которая должна быть решена с помощью инструмента управления пакетами.
Хотя причины, лежащие в основе альтернативы «pkg-config», которые обычно предлагает Уильям Пурселл, заключается в том, что существуют целые платформы, такие как GTK, которые работают «неправильно», и для их исправления потребуются все эти библиотеки для изменения каталога, в который они устанавливаются. Это приведет к серьезному разрушению систем сборки существующих приложений. Поскольку я не думаю, что «неправильный» способ на самом деле наносит какой-либо вред, это не стоит меняться. – ptomato
Кроме того, 'pkg-config' позволяет сохранять несовместимые версии библиотек (например, GTK 2 и GTK 3) параллельно. Хотя я уверен, что Уильям Пурселл подумал об этом и будет рад объяснить, как сделать это по-своему ;-) – ptomato
@ptomato Нет, я строго не-gui человек и никогда не обращался напрямую с gtk. Но я считаю, что вполне возможно сделать такие вещи, как «LDFLAGS = -L $ (pkg-config -libs-only-L gtk + -2.0) CPPFLAGS = $ (pkg-config --cflags gtk + -2.0) LIBS = $ (pkg-config --libs-only-l gtk + -2.0) ", и эти параметры можно поместить в config.site. Чтобы быть ясным, у меня нет возражений против pkg-config, но мне не нравятся PKG_CHECK_MODULES по причинам, изложенным в моем ответе. –