pkg-config命令了解和使用

1.首先,什么是pkg-config:
pkg-config 当你从源代码编译软件时,用来提供依赖库的信息的软件。pkg-config原本是设计用于Linux的,但现在在各个版本的BSD、windows、Mac OS X和Solaris上都有着可用的版本。
它输出已安装的库的各个信息,包括:
1)C或C++编译器需要的参数
2)链接器需要的参数
3)已安装软件包的版本信息

2.什么时候用的着?
当在Linux/Unix重 编写完程序,开始编译(寻找头文件)和链接(寻找链接库)时,就用上它了。
3.怎么用?
一)最常用的有:
 
   

pkg-config 库的名称(比如,opencv --libs

pkg-config 库的名称(比如,opencv) --cflags

或者:

pkg-config 库的名称(比如,opencv --libs --cflags

下面列出,对于opencv(我的系统是debian),这三条命令的输出:
 二)在shell中编译和链接程序时:
 
   

gcc cvtest.c `pkg-config opencv --libs --cflags`

注:命令中的“ ` ”是反引号,不是单引号;其一般位于Tab键正上方,数字键1的左边。在shell语言中,反引号具有解引用的作用,即命令输出代替命令本身。
三)在make中的用法(更上一层楼!):
【我想没有人不希望自己编写的程序能够十分顺利的被别人引用、编译、运行通过。而在写makefile时,引入pkg-config则可以大大方便了程序移植,因为它为你为你指明你要使用的库的头文件的位置和要链接的库;尤其是在不同的Linux平台迁移程序,很可能库安装的位置跟你的系统中库的位置不一样。】

为了说明这个好处,先提供第一个版本的makefile!
 从上图中,可以看出makefile中的CFLAGS和LIBS都是指定的搜索路径和名称(自己写,可是很容易出错的);而第二个版本不但写的少,不容易出错,而且方便在不同版本Linux中移植。见下图:
 
从上图中,可以看出,通过在makefile中利用shell方式可以把pkg-config的输出给makefile中的变量赋值,以便之后的使用。
可见,pkg-config是makefile的好帮手

4.最后:pkg-config工作原理:命令的输出来源于那里呢?
pkg-config命令通过检索存放于系统的*.pc文件来给出相应的库的输出。
比如,如果在系统中安装了opencv库,则对应的在系统中存放着opencv.pc;而这个文件就记录着opencv库的版本、编译参数、链接参数等信息。
下面给我,我系统中opencv.pc的内容:
 
   

# Package Information for pkg-config prefix=/usr exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir_old=${prefix}/include/opencv includedir_new=${prefix}/include Name: OpenCV Description: Open Source Computer Vision Library Version: 2.3.1 Libs: -L${libdir} -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann Cflags: -I${includedir_old} -I${includedir_new}

这个文件来源于那里呢?这个*.pc文件在你的库安装包里,一般是库的打包者或发行者设置好的。当安装库时,*.pc文件被放于你系统重的某一个文件夹中(根据你的系统设置,一般存放的位置有/usr/lib/pkgconfig/等)。

你可能感兴趣的:(PKG—CONFIG)