pkg-config
1.1、pkg-config简介
是什么 ?:a tool helps you insert the correct compiler options on the command line when compiling applications and libraries.
开发语言:C
官方主页:https://freedesktop.org/wiki/Software/pkg-config
源码仓库:https://gitlab.freedesktop.org/pkg-config/pkg-config

pkg-configGNU/Linux系统中的实现依赖glibc

pkg-config的替代者pkgconf不依赖glibc

1.2、通过包管理器安装pkg-config
操作系统包管理器安装命令
Windowsscoopscoop install pkg-config
macOSHomeBrewbrew install pkg-config
GNU/LinuxLinuxBrewbrew install pkg-config
aptsudo apt-get install -y pkg-config
PCLinuxOSaptsudo apt-get install -y pkgconfig
CentOSyumsudo yum install -y pkgconfig
openSUSEzyppersudo zypper install -y pkg-config

Arch Linux

ArcoLinux

Manjaro Linux

yayyay -Syyu --noconfirm
yay -S    --noconfirm pkg-config-git
Gentoo LinuxPortagesudo emerge dev-util/pkgconfig
1.3、通过源码安装pkg-config 

step1、安装依赖

下载时cURL
解压时targzip
编译时POSIX shGNU CoreUtilsmakegcc
运行时glibc ( libc.sold-linux-x86-64.so )

step2、使用curl命令下载pkg-config源码包 (

curl -LO https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz

step3、使用tar解压pkg-config源码包

tar vxf pkg-config-0.29.2.tar.gz

step4、进入pkg-config-0.29.2目录,并查看它的内容

step5、配置、编译、安装

./configure && make && sudo make install
1.5、pkg-config命令

pkg-config命令的使用格式如下:

pkg-config [pkgName] <option>...
pkg-config <option>... [pkgName]
1.5.1、--help

查看pkg-config命令的使用帮助。

1.5.2、--version

查看pkg-config命令的版本号。

示例:

1.5.3、--list-all

列出所有扫描到的pkgName和对应的描述。

示例:

pkg-config --list-all | grep -i qt

运行效果如下:

1.5.4、pkgName

pkgName可以通过pkg-config --list-all | grep -i xx查询而获得。

实际上,每次执行pkg-config命令的时候,总是先去查找后缀名为.pc的配置文件, 文件名前缀就是pkgName

.pc配置文件的查找规则如下:

1、在/usr/lib目录下查找。

2、在PKG_CONFIG_PATH环境变量中的路径中查找。

PKG_CONFIG_PATH环境变量的配置方法与PATH环境变量完全一样,示例:

export PKG_CONFIG_PATH=/usr/local/opt/curl/lib/pkgconfig:$PKG_CONFIG_PATH
1.5.5、--debug

打印出详细的执行日志。

示例:

pkg-config --debug --list-all libcurl
1.5.6、--modversion

必须指定pkgName

查看指定pkgName的版本。

示例:

pkg-config --modversion libcurl

运行效果如下:

1.5.7、--exsits

必须指定pkgName

检测指定的pkgName是否存在。

示例:

pkg-config --exists libcurl && echo "libcurl exsits"
1.5.8、--cflags

必须指定pkgName

获取指定的pkgName-I-D-L参数。

示例:

pkg-config --cflags Qt5Core

运行效果如下:

1.5.9、--cflags-only-I

必须指定pkgName

获取指定的pkgName-I参数。

示例:

pkg-config --cflags-only-I Qt5Core

运行效果如下:

1.5.10、--cflags-only-other

必须指定pkgName

获取指定的pkgName-D-F参数。

示例:

pkg-config --cflags-only-other Qt5Core

运行效果如下:

1.5.11、--libs

必须指定pkgName

获取指定的pkgName-l-L-framework-F参数。

示例:

pkg-config --libs Qt5Core
pkg-config --libs ncurses

运行效果如下:

1.5.12、--libs-only-l

必须指定pkgName

获取指定的pkgName-l参数。

示例:

pkg-config --libs-only-l ncurses

运行效果如下:

1.5.13、--libs-only-L

必须指定pkgName

获取指定的pkgName-L参数。

示例:

pkg-config --libs-only-L ncurses

运行效果如下:

1.5.14、--libs-only-other

必须指定pkgName

获取指定的pkgName-F-framework参数。

示例:

pkg-config --libs-only-other Qt5Core

运行效果如下:

1.5.15、--print-variables

必须指定pkgName

获取指定的pkgNamepc文件中定义的变量。

示例:

pkg-config --print-variables Qt5Core

运行效果如下:

这是因为/usr/local/opt/qt/lib/pkgconfig/Qt5Core.pc文件中的定义如下:

prefix=/usr/local/Cellar/qt/5.13.0
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/lib/QtCore.framework/Headers

host_bins=${prefix}/bin
qt_config=shared qt_framework release c++11 c++14 concurrent dbus reduce_exports stl properties animation textcodec big_codecs codecs itemmodel proxymodel concatenatetablesproxymodel textdate datestring doubleconversion filesystemiterator filesystemwatcher gestures identityproxymodel library mimetype process statemachine regularexpression settings sharedmemory sortfilterproxymodel stringlistmodel systemsemaphore temporaryfile translation transposeproxymodel xmlstream xmlstreamreader xmlstreamwriter

Name: Qt5 Core
Description: Qt Core module
Version: 5.13.0
Libs: -F${libdir} -framework QtCore
Cflags: -DQT_CORE_LIB -I${includedir} -F${libdir}
1.5.16、--variable=KEY

必须指定pkgName

获取指定的pkgName中定义的KEY变量的值。

示例:

pkg-config --variable=prefix Qt5Core

运行效果如下: