pkg-config命令了解和使用

时间:2022-07-27 18:51:15
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),这三条命令的输出:
pkg-config命令了解和使用 二)在shell中编译和链接程序时:

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

注:命令中的“ ` ”是反引号,不是单引号;其一般位于Tab键正上方,数字键1的左边。在shell语言中,反引号具有解引用的作用,即命令输出代替命令本身。
三)在make中的用法(更上一层楼!): 【我想没有人不希望自己编写的程序能够十分顺利的被别人引用、编译、运行通过。而在写makefile时,引入pkg-config则可以大大方便了程序移植,因为它为你为你指明你要使用的库的头文件的位置和要链接的库;尤其是在不同的Linux平台迁移程序,很可能库安装的位置跟你的系统中库的位置不一样。】
为了说明这个好处,先提供第一个版本的makefile! pkg-config命令了解和使用 从上图中,可以看出makefile中的CFLAGS和LIBS都是指定的搜索路径和名称(自己写,可是很容易出错的);而第二个版本不但写的少,不容易出错,而且方便在不同版本Linux中移植。见下图: pkg-config命令了解和使用  从上图中,可以看出,通过在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/等)。