Ответ 1
В течение многих лет я использовал PKG_CHECK_MODULES
и нашел, что это очень полезно. Я видел, как люди жаловались, что использование PKG_CHECK_MODULES
вызвало "тонкие ошибки сборки" на разных платформах, но я никогда не обнаружил, что это особенно убедительная причина, чтобы прекратить его использовать. Однако я считаю, что обязательство исполнителя должно отвечать на жалобы пользователей там, где это необходимо, так что это всегда было проблемой. Однако моя основная жалоба с PKG_CHECK_MODULES
заключается в том, что она вызывает сбои там, где она не должна. Если пользователь устанавливает libfoo
в /p/a/t/h
и вызывает configure
script с LDFLAGS=-L/p/a/t/h
, пользователь оправдывается ожиданием, что конфигурация найдет libfoo
. Но пользователь также должен установить PKG_CONFIG_PATH
, чтобы configure
script мог найти foo.pc
, чтобы конфигурация была успешной, и IMO, которая сломана. Можно было бы вызвать 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
, должен избегать использования ее в своей конфигурации. Скорее, я рекомендую, чтобы библиотеки не поощряли его использование и перестали распространять файлы .pc
. Проблема, которую пытается решить файл .pc
, лучше решать на более высоком уровне. Autotools не являются системой управления пакетами, и это проблема, которая должна быть решена с помощью инструмента управления пакетами.