Lassen Sie uns zunächst erfahren, was pkg-config tun kann. Hier ist die Wikipedia-Beschreibung von pkg-config:
pkg-config ist eine Computersoftware, die eine einheitliche Schnittstelle zum Abfragen installierter Bibliotheken beim Kompilieren von Software aus Quellcode bereitstellt. pkg-config wurde ursprünglich für Linux entwickelt, aber jetzt sind Versionen für verschiedene Versionen von BSD, Windows, Mac OS X und Solaris verfügbar.
Einfach ausgedrückt bietet pkg-config hauptsächlich die folgenden Funktionen:
1. Überprüfen Sie die Versionsnummer der Bibliothek. Wenn die Version der erforderlichen Bibliothek die Anforderungen nicht erfüllt, wird eine Fehlermeldung ausgegeben, um zu vermeiden, dass die falsche Version der Bibliotheksdatei verknüpft wird.
2. Ermitteln Sie die Vorverarbeitungsparameter für die Kompilierung, z. B. Makrodefinitionen und den Speicherort der Header-Dateien.
3. Linkparameter abrufen, z. B. den Speicherort der Bibliothek und anderer abhängiger Bibliotheken, Dateinamen und andere Verbindungsparameter.
4. Fügen Sie automatisch Einstellungen für andere Bibliotheken hinzu, von denen es abhängt.
Kürzlich eine PHP-Erweiterung für das Zuschneiden von Bildern mit opencv entwickelt. Opencv muss viele SO-Bibliotheken laden. Es ist zu mühsam, sie manuell zu config.m4 hinzuzufügen, und die Nachwartung wird nicht genutzt. Glücklicherweise stellt opencv die Datei opencv.pc bereit, sodass Sie pkg-config verwenden können, um die kompilierten Parameter automatisch abzurufen.
Das Folgende ist der Code, den ich in config.m4 geschrieben habe, um OpenCV-bezogene Bibliotheken und Header-Dateien automatisch zu laden.
dnl # --with-tclip -> check with-path SEARCH_PATH="/usr/lib/pkgconfig" # 定义pkgconfig文件,即扩展名pc文件存放路径 SEARCH_FOR="opencv.pc" # 要寻找的文件 if test -r $PHP_TCLIP/$SEARCH_FOR; then # TCLIP_DIR=$PHP_TCLIP else # search default path list AC_MSG_CHECKING([for tclip files in default path]) for i in $SEARCH_PATH ; do if test -r $i/$SEARCH_FOR; then TCLIP_DIR=$i AC_MSG_RESULT(found in $i) fi done fi dnl if test -z "$TCLIP_DIR"; then AC_MSG_RESULT([not found]) AC_MSG_ERROR([Please reinstall the tclip distribution]) fi OPENCV_FLAGS="`pkg-config opencv --libs --cflags opencv`" for i in $OPENCV_FLAGS;do if test ${i:0:2} = "-I" ;then PHP_ADD_INCLUDE(${i:2}) elif test ${i:${#i}-3} = ".so" ;then dir_name=`dirname $i` file_name=${i/$dir_name/} file_name=${file_name/\/lib/} file_name=${file_name/.so/} PHP_ADD_LIBRARY_WITH_PATH($file_name,$dir_name,TCLIP_SHARED_LIBADD) fi done
Hinweis:
Bitte verwenden Sie keine geschweiften Klammern im bedingten Teil von if, da sonst Syntaxfehler im von m4 generierten Makefile auftreten.
Referenzdokument
http://www.chenjunlu.com/2011/03/understanding-pkg-config-tool/ „Grundlegendes zum pkg-config-Tool“
http://www.php .net/manual/zh/internals2.buildsys.configunix.php „Interaktion mit dem UNIX-Build-System: config.m4“