Przez wiele lat używałem PKG_CHECK_MODULES
i okazał się być bardzo przydatne. Widziałem ludzi narzekających, że używanie PKG_CHECK_MODULES
powodowało "subtelne błędy kompilacji" na różnych platformach, ale nigdy nie odkryłem, że jest to szczególnie przekonujący powód, aby przestać go używać. Uważam jednak, że obowiązkiem opiekuna jest reagowanie w razie potrzeby na skargi użytkowników, co zawsze było kłopotliwym problemem. Jednak moja główna skarga z PKG_CHECK_MODULES
polega na tym, że powoduje awarie tam, gdzie nie powinny. Jeśli użytkownik zainstaluje libfoo
w /p/a/t/h
i wywoła skrypt configure
z LDFLAGS=-L/p/a/t/h
, użytkownik jest uzasadniony oczekiwaniem, że konfiguracja znajdzie libfoo
. Ale użytkownik musi również ustawić PKG_CONFIG_PATH
, aby skrypt configure
mógł znaleźć foo.pc
, aby konfiguracja się powiodła, a IMO, który jest uszkodzony. Byłoby możliwe wywołanie AC_CHECK_LIB
, a następnie wywołanie tylko PKG_CHECK_MODULES
, jeśli biblioteka nie zostanie znaleziona przez standardowy mechanizm, aby uniknąć tego problemu. Inną kwestią jest to, że jest całkowicie możliwe, aby PKG_CHECK_MODULES
znalazł plik, w którym informacja jest niedokładna, powodując niepowodzenie kompilacji. W takim przypadku konieczne jest wywołanie AC_CHECK_LIB
po PKG_CHECK_MODULES
.
W skrócie, aby korzystać PKG_CHECK_MODULES
prawidłowo, konieczne jest, aby powołać AC_CHECK_LIBS
, potem warunkowo wywołać PKG_CHECK_MODULES
, a następnie powołać AC_CHECK_LIBS
ponownie, aby potwierdzić informacje znalezione przez PKG_CHECK_MODULES
. Cała ta dodatkowa praca opiekuna właśnie po to, by ułatwić użytkownikom instalowanie ich bibliotek w niestandardowej lokalizacji, jest, IMO, absurdem. Użytkownik powinien skonfigurować łańcuch narzędzi, aby znaleźć biblioteki za pomocą standardowych mechanizmów.
- EDIT -
Aby wyjaśnić, ja nie sugeruję, że pakiet, który wykorzystuje bibliotekę, która zachęca do korzystania z PKG_CHECK_MODULES
powinny unikać go w swoim configury. Zalecam raczej, aby biblioteki nie zachęcały do korzystania z nich i przestały rozpowszechniać pliki .pc
. Problem, który próbują rozwiązać pliki .pc
, jest lepiej rozwiązywany na wyższym poziomie. Autotools to , a nie system zarządzania pakietami. Jest to problem, który należy rozwiązać za pomocą narzędzia do zarządzania pakietami.
Chociaż powody są uzasadnione alternatywą dla 'pkg-config', którą zazwyczaj proponuje William Pursell, rzeczywistość jest taka, że istnieją całe platformy, takie jak GTK, które działają" w niewłaściwy "sposób, a ich poprawienie wymagałoby wszystkich tych bibliotek. aby zmienić katalog, w którym się instalują. Spowodowałoby to masowe zerwanie systemów kompilacji istniejących aplikacji. Ponieważ nie uważam, że "niewłaściwy" sposób rzeczywiście wyrządza jakąkolwiek krzywdę, nie warto się zmieniać. – ptomato
Ponadto, 'pkg-config' umożliwia również równoległe instalowanie niekompatybilnych wersji bibliotek (takich jak GTK 2 i GTK 3). Chociaż jestem pewien, że William Pursell pomyślał o tym i z przyjemnością wytłumaczy, jak to zrobić w ten sposób ;-) – ptomato
@ptomato Nie, jestem osobą stricte non-gui i nigdy nie kontaktowałem się bezpośrednio z gtk. Ale uważam, że powinno być całkiem możliwe wykonywanie takich rzeczy jak "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) ", a te opcje można umieścić w config.site. Dla jasności nie mam zastrzeżeń do pkg-config, ale nie lubię PKG_CHECK_MODULES z powodów opisanych w mojej odpowiedzi. –