2.什么时候用的着? 当在Linux/Unix重 编写完程序,开始编译(寻找头文件)和链接(寻找链接库)时,就用上它了。 3.怎么用? 一)最常用的有:
下面列出,对于opencv(我的系统是debian),这三条命令的输出:pkg-config 库的名称(比如,opencv) --libs
pkg-config 库的名称(比如,opencv) --cflags
或者:
pkg-config 库的名称(比如,opencv) --libs --cflags
注:命令中的“ ` ”是反引号,不是单引号;其一般位于Tab键正上方,数字键1的左边。在shell语言中,反引号具有解引用的作用,即命令输出代替命令本身。 三)在make中的用法(更上一层楼!): 【我想没有人不希望自己编写的程序能够十分顺利的被别人引用、编译、运行通过。而在写makefile时,引入pkg-config则可以大大方便了程序移植,因为它为你为你指明你要使用的库的头文件的位置和要链接的库;尤其是在不同的Linux平台迁移程序,很可能库安装的位置跟你的系统中库的位置不一样。】gcc cvtest.c `pkg-config opencv --libs --cflags`
为了说明这个好处,先提供第一个版本的makefile!
4.最后:pkg-config工作原理:命令的输出来源于那里呢? pkg-config命令通过检索存放于系统的*.pc文件来给出相应的库的输出。 比如,如果在系统中安装了opencv库,则对应的在系统中存放着opencv.pc;而这个文件就记录着opencv库的版本、编译参数、链接参数等信息。 下面给我,我系统中opencv.pc的内容:
这个文件来源于那里呢?这个*.pc文件在你的库安装包里,一般是库的打包者或发行者设置好的。当安装库时,*.pc文件被放于你系统重的某一个文件夹中(根据你的系统设置,一般存放的位置有/usr/lib/pkgconfig/等)。# 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}