Pkg-config到底是个啥
😄
Pkgconfig其实跟使用的CMakeList文件中的配置文件作用是一样的,都是为了在需要使用第三方头文件或库文件的时候告诉编译器头文件和库文件的位置 |
百度百科的解释是
pkg-config 是一个在源代码编译时查询已安装的库的使用接口的计算机工具软件。pkg-config原本是设计用于Linux的,但现在在各个版本的BSD、windows、Mac OS X和Solaris上都有着可用的版本。
使用方法
gcc -o test test.c $(pkg-config --libs --cflags libpng)
当安装一个库的时候,会有一个.pc
文件,通过pc文件就能知道所需要的头文件和库所在的位置。
其中cflags
指定的是头文件
其中libs
指定的是库文件
如何找到pc文件???
在linux系统下面,默认查找的路径是/usr/lib64/pkgconfig
当然可以手动指定,也就是通过设置PKG_CONFIG_PATH
这个环境变量来进行指定路径下查找.pc
文件
makefile中使用pkgconfig
在Cmake的文件中的时候可以使用FindPkgConfig
进行查找pkg-config模块
PKGCONFIG(package includedir libdir linkflags cflags)
例如
PKGCONFIG(libart-2.0 LIBART_INCLUDE_DIR LIBART_LINK_DIR LIBART_LINK_FLAGS LIBART_CFLAGS)
makefile使用
CFLAGS=-Wall -g -std=c++11 `pkg-config --cflags --libs opencv realsense2`
如何编写PC文件
prefix=/home/zhongsy/Downloads/Game/gaminganywhere/deps.posix
exec_prefix=${prefix}
libdir=${prefix}/lib
includedir=${prefix}/include
Name: libavdevice
Description: FFmpeg device handling library
Version: 56.4.100
Requires:
Requires.private: libavfilter >= 5.40.101, libswscale >= 3.1.101, libpostproc >= 53.3.100, libavformat >= 56.40.101, libavcodec >= 56.60.100, libswresample >= 1.2.101, libavutil >= 54.31.100
Conflicts:
Libs: -L${libdir} -lavdevice
Libs.private: -lXv -lX11 -lXext -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb-render -lxcb-shape -lxcb -lxcb-shape -lxcb -lX11 -lsndio -lasound -lxvidcore -L/home/zhongsy/Downloads/Game/gaminganywhere/deps.posix/lib -lx265 -lx264 -lvpx -lm -lvpx -lm -lvpx -lm -lvpx -lm -lvorbisenc -lvorbis -logg -ltheoraenc -ltheoradec -logg -lopus -lmp3lame -lm -llzma -lbz2 -lz -pthread
Cflags: -I${includedir}
在pc
文件中主要有的是一下几个变量
- Name 名称
- Description 描述
- version 版本
- cflags 所需要使用头文件的目录路径
- libs 所需要库文件的目录路径