为已经安装的包提供了include,以及实际库安装的位置编译选项的输出和管理。
当你需要使用某些包的时候,有可能需要自己输入包含头文件的路径以及库的位置。因为有些库以及它的头文件不一定是安装在系统默认存放库和头文件的地方。
通过对pkg-config指示不同参数以及库的名字,它为gcc提供了你所使用库的编译选项
例如,当我输入
johnman@johnman-desktop:/$ pkg-config --cflags glib-2.0 的时候
输出
-I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
这个看起来像gcc头文件路径指示的选项
所有的库都可以通过pkg-config来统一管理,这些都是通过配置文件来存放信息的。这些配置文件后缀名为.pc,我的系统这些文件存放在:/usr/lib/pkgconfig/目录下面
查看该目录下的glib-2.0.pc
文件内容如下:
########################
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
glib_genmarshal=glib-genmarshal
gobject_query=gobject-query
glib_mkenums=glib-mkenums
Name: GLib
Description: C Utility Library
Version: 2.12.11
Libs: -L${libdir} -lglib-2.0
Cflags: -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include
########################
猜想pkg-config的Cflags选项就是输出最后一行 -I${includedir}/glib-2.0 -I${libdir}/glib-2.0/include
补遗:
在网上搜了一下PKG_CONFIG_PATH参数的作用。
当编译或者config的时候,可能会提示找不到某个包,例如可能明明已经安装glib-2.0,但是还是提示找不到。一般来说,原因可能在于安装的包没有装在/usr/lib下面,所以默认找不到。
如果出错信息提示可以通过修改PKG_CONFIG_PATH环境变量来解决。
可以通过这样解决:当安装的包(例如glib-2.0)的时候,也会在系统中添加了相应的.pc文件(例如lib-2.0.pc),但是可能这个.pc文 件不在pkg-config的默认的搜索路径下面。这时可以修改PKG_CONFIG_PATH环境变量来把.pc文件的路径添加进去,这样应该就可以解 决了。
后记:总算是大概弄明白了,革命尝未成功,菜鸟仍需努力
pkg-config用法
http://www.sitearchitect.cn/archives/262
概述
返回已安装库文件的元信息。
环境变量:PKG_CONFIG_PATH。pkg-config将在该变量下查找所有的.pc文件。此外,它还会查找/usr/lib/pkgconfig/下的.pc文件。
pkg-config works on multiple platforms: Linux and other UNIX-like operating systems, Mac OS X and Windows. It does not require anything but a reasonably well working C compiler and a C library, but can use an installed glib if that is present. (A copy of glib 1.2.8 is shipped together with pkg-config and this is sufficient for pkg-config to compile and work properly.)
库文件编译完成后,会在{installed_home/lib/}下生成产生一个名为pkgconfig的目录,内含该链接库的.pc文件。这时 需要将该文件复制到/usr/lib/pkgconfig/目录中或在环境变量中指定该文件的路径。这样做的目的是为了使依赖此链接库的其它程序能够借助 pkg-config自动加载该库,避免编译期错误。
参数列表
–list | 列出所有已安装的共享库 |
–cflags | 列出指定共享库的预处理和编译flag。 |
–libs | 列出指定共享库的链接flag。 |