基本概念
pkg-config 是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。可以理解为一个支持提供编译链接依赖库的管理工具软件。
在编译和链接时,可以提供必要的库文件、头文件支持以及相关的描述信息。元数据存储在 pkg-config 文件里面,文件后缀 .pc ,文件需要存放在 pkg-config 工具能够找到的特定位置(如 /usr/lib/pkgconfig 及 /usr/local/lib/pkgconfig )。根据配置文件中的配置信息,生成编译所需要的头文件和库文件。
示例文件(opencv.pc的模板文件):
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir_old=@includedir@/opencv
includedir_new=@includedir@
#上面几个都是变量,可自行定义
Name: OpenCV
Description: Open Source Computer Vision Library
Version: @OPENCV_VERSION_PLAIN@
Libs: @OPENCV_PC_LIBS@
Libs.private: @OPENCV_PC_LIBS_PRIVATE@
Cflags: -I${includedir_old} -I${includedir_new}
- Name: 库名称
- Description: 库描述
- URL: 来源网站
- Version: 版本信息
- Requires: 本库所依赖的其他库文件。所依赖的库文件的版本号可以通过使用如下比较操作符指定:=,<,>,<=,>=。
- Requires.private: 本库所依赖的一些私有库文件,但是这些私有库文件并不需要暴露给应用程序。这些私有库文件的版本指定方式与Requires中描述的类似。
- Libs: 链接本库时所需要的一些链接选项,等同于LDFLAGS参数。
- Libs.private: 本库所需要的一些私有库的链接选项。
- Cflags: 链接库编译时所需的CFLAGS参数,即头文件路径。
一般来说,需要具有Name、Description、Version、Libs、Cflags这样几个字段。
使用
编译链接解决库依赖问题
将依赖模块集成到用户项目中
把 pkg-config 模块集成到用户项目中的时候,使用自动配置(autoconf)的宏可以简化这个过程。
-
PKG_PREREQ(MIN-VERSION):确保所使用的自动配置宏高于或等于 MIN-VERSION 。
-
PKG_PROG_PKG_CONFIG([MIN-VERSION]):定位 pkg-config 工具在系统中的位置,并检测其版本的兼容性。
-
PKG_CHECK_EXISTS(MODULES,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]):检测某些模块是否存在。
-
PKG_CHECK_MODULES(VARIABLE-PREFIX,MODULES,[ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND]):检测某些模块是否存在,如果存在,根据 pkg-config --cflags 和 pkg-config --libs 的输出设置 _CFLAGS 和 _LIBS 。
参考
Guide to pkg-config
Linux中pkg-config的使用
pkg-config 学习笔记
pkg-config 使用及建立方法