pkg-config的用途:
大家应该都知道用第三方库,就少不了要使用到第三方的头文件和库文件。我们在编译、链接的时候,必须要指定这些头文件和库文件的位置。
对于一个比较大第三方库,其头文件和库文件的数量是比较多的。如果我们一个个手动地写,那将是相当麻烦的。所以,pkg-config就应运而生了。pkg-config能够把这些头文件和库文件的位置指出来,给编译器使用。
*.pc文件的编写:
首先要明确一点,因为pkg-config也只是一个命令,所以不是你安装了一个第三方的库,pkg-config就能知道第三方库的头文件和库文件所在的位置。pkg-config命令是通过查询XXX.pc文件而知道这些的。我们所需要做的是,写一个属于自己的库的.pc文件。
如下展示hyperscan开源库中的libhs.pc文件的撰写:
1 [root@localhost pkgconfig]# ls 2 libhs.pc 3 [root@localhost pkgconfig]# 4 [root@localhost pkgconfig]# 5 [root@localhost pkgconfig]# cat libhs.pc 6 prefix=/usr/local 7 exec_prefix=/usr/local 8 libdir=/usr/local/lib 9 includedir=/usr/local/include 10 11 Name: libhs 12 Description: Intel(R) Hyperscan Library 13 Version: 4.5.0 14 Libs: -L${libdir} -lhs 15 Libs.private: -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc 16 Cflags: -I${includedir}/hs 17 [root@localhost pkgconfig]#
设置pkg-config的环境变量:
pkg-config又是如何找到所需的.pc文件呢?这就需要用到一个环境变量PKG_CONFIG_PATH了。这环境变量写明.pc文件的路径,pkg-config命令会读取这个环境变量的内容,这样就知道pc文件了。
1 export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig
将环境变量增加到.bashrc脚本文件中:
1 PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig 2 export PKG_CONFIG_PATH 3 source .bashrc
pkg-config的查询结果:
1 [root@localhost pkgconfig]# pkg-config --cflags --libs libhs 2 -I/usr/local/include/hs -L/usr/local/lib -lhs 3 [root@localhost pkgconfig]#
在脚本和编译的命令行中使用pkg-config的查询结果:
1 [root@localhost examples]# g++ -o simplegrep simplegrep.c $(pkg-config --cflags --libs libhs) 2 [root@localhost examples]# 3 [root@localhost examples]# echo $(pkg-config --cflags --libs libhs) 4 -I/usr/local/include/hs -L/usr/local/lib -lhs 5 [root@localhost examples]# ls 6 CMakeFiles CMakeLists.txt patbench.cc README.md simplegrep.c 7 cmake_install.cmake Makefile pcapscan.cc simplegrep 8 [root@localhost examples]#
pkg-config官网下载地址如下,需要手动进行安装。
https://www.freedesktop.org/wiki/Software/pkg-config/