通过pkg-config添加libs和include

首先介绍命令行编译C++项目的方法,指出其问题所在。

g++的生成可执行文件语法:

g++ -o test test.c -I/home/include -pthread -L/usr/local/lib -llog4cpp

其中,

1,-I后表示要搜索的头文件的路径,系统默认的搜索路径包括/usr/include、/usr/local/include。添加了/home/include后,会先在/home/include的中搜索,其中-pthread就是待搜索的一个头文件。

通过locate pthread.h命令,可以看出,pthread.h 所在的路径为/usr/include。

2,-L后表示要搜索的动态链式库的路径,系统默认的搜索路径由环境变量LD_LIBRARY_PATH设置。

通过echo $LD_LIBRARY_PATH可以得到,-L默认的路径为/usr/local/lib:/usr/local/lib64:/usr/local/src/ACE_wrappers(自己设置的)

log4cpp表示待搜索的动态链式库,它的位置在/usr/local/lib。

问题:每次编译都需要考虑所引用的头文件,动态链接库,很麻烦。而且对于一些大的项目,像opencv,动态链接库不止一个两个,每一次编译项目时都写这么多链接库,不仅麻烦还容易出错。

 

下面进入正题了。

可以利用pkg-config读取配置文件的格式完成这部分工作,比如需要对log4cpp进行编译,就将其配置参数写在log4cpp.pc文件中,然后编译链接时,调用如下命令就可以完成编译链接。

g++ -o test test.cpp `pkg-config --libs --cflags log4cpp`

下面看看log4cpp.pc的内容,如下所示:

prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: log4cpp
Description: C++ library for flexible logging, modeled after Log4j
Version: 1.1 
Libs: -L${libdir} -llog4cpp  
Cflags: -I${includedir} -pthread 

Libs表示引用动态链接库的路径,以及需要的动态链接库;Cflags表示引用头文件的路径,以及需要的头文件。

 

-----------------------------------------------------------------------------------------------------------------------------------

下面简单介绍一下pkg-config,它的搜索路径可以参考说明书,man pkg-config

PKG_CONFIG_PATH
             List of secondary directories where ‘.pc’ files are looked up.

PKG_CONFIG_LIBDIR
             List of primary directories where ‘.pc’ files are looked up.

如上所示,pkg-config的搜索.pc的路径由PKG_CONFIG_LIBDIR、PKG_CONFIG_PATH共同确定,其中前者为第一路径,后者为第二路径。如果搜索查找路径下的所有.pc文件,可以通过pkg-config --list-all。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值