相信用过qt、wxwidget或者其他一些比较复杂的工具库时,都用过pkg-config.
king@debian:~$ pkg-config --list-all | grep -i qt
Qt5Widgets Qt5 Widgets - Qt Widgets module
QtCore Qtcore - Qtcore Librarydule
Qt5Network Qt5 Network - Qt Network module
Qt5Gui Qt5 Gui - Qt Gui module
Qt5Core Qt5 Core - Qt Core module
QtGui Qtgui - Qtgui Library
king@debian:~$ pkg-config --libs --cflags QtCore
-DQT_SHARED -I/usr/include/qt4 -I/usr/include/qt4/QtCore -lQtCore
king@debian:~$ pkg-config --libs QtCore
-lQtCore
king@debian:~$ pkg-config --cflags QtCore
-DQT_SHARED -I/usr/include/qt4 -I/usr/include/qt4/QtCore
king@debian:~$ find / -name pkgconfig -type d 2>/dev/null
/usr/share/pkgconfig
/usr/lib/i386-linux-gnu/pkgconfig
/usr/lib/pkgconfig
king@debian:~$ find /usr/lib/i386-linux-gnu/pkgconfig/ -name "*.pc" | grep -i qt
/usr/lib/i386-linux-gnu/pkgconfig/QtScriptTools.pc
/usr/lib/i386-linux-gnu/pkgconfig/QtWebKit.pc
/usr/lib/i386-linux-gnu/pkgconfig/QtTest.pc
/usr/lib/i386-linux-gnu/pkgconfig/QtCore.pc
export PKG_CONFIG_LIBDIR=$HOME/vlc/contrib/i686-w64-mingw32/lib/pkgconfig
prefix=/usr/local
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: foo
Description: The foo library
Version: 1.0.0
Cflags: -I${includedir}/foo
Libs: -L${libdir} -lfoo
假设一种场景,foo依赖bar,分别包含foo.so和bar.so。当上层应用使用foo时,实际只需要连接foo即可,动态库的机制可以确保bar被foo自动依赖。而避免上层应用直接依赖bar的情形。
prefix=/usr
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: foo
Description: The foo library
Version: 1.0.0
Cflags: -I${includedir}/foo
Libs: -L${libdir} -lfoo
prefix=/usr
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib
Name: bar
Description: The bar library
Version: 2.1.2
Requires.private: foo >= 0.7
Cflags: -I${includedir}
Libs: -L${libdir} -lbar
$ pkg-config --libs foo
-lfoo
$ pkg-config --libs bar
-lbar
$ pkg-config --libs --static bar
-lbar -lfoo