pkg-config

用于获取已安装库的基本信息

pkg-config查看全部参数和意义

典型用法

1
2
program: program.c
cc program.c ‘pkg-config --cflags --libs gnomeui‘

就是[–cflags] [–libs],用来指出程序依赖的头文件和库文件路径

原理

pkg-config读取库名对应的.pc文件

默认情况下,会去prefix/lib/pkgconfig/路径下查找,具体到Linux系统,就是/usr/lib/pkgconfig/目录,若找不到,则会去PKG_CONFIG_PATH环境变量指定的路径下查找。因此,如果我们安装的库文件不在系统环境变量中,需要将其添加到PKG_CONFIG_PATH中,具体来说,执行如下操作:

1
export PKG_CONFIG_PATH=/home/mylibs/lib/pkgconfig:$PKG_CONFIG_PATH

sox.pc内容

1
2
3
4
5
6
7
8
9
10
11
12
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: SoX
Description: Audio file format and effects library
Version: 14.4.3git
URL: http://sox.sourceforge.net
Libs: -L${libdir} -lsox
Libs.private: -lm
Cflags: -I${includedir}

最后两个参数可以简化Makefile的书写

编写.pc

例子1 动态库的pc文件

假设我写了libfoo.so,我的库将会被安装到/usr/local/lib/,头文件会放到/usr/local/include/foo。那么,pc文件可以这么写。

1
2
3
4
5
6
7
8
9
10
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