在Makefile中查找Boost库

时间:2012-08-31 09:51:55

标签: c++ boost makefile pkg-config

在构建过程中包含Boost库的最佳做法是什么?

为了说明,假设我们的项目使用了Boost的正则表达式,并按如下方式编译:

g++ -lboost_regex -o main main.cpp

...这意味着我可以编写一个包含以下内容的Makefile:

LDFLAGS+=-lboost_regex

不幸的是,这不适用于我的系统:

$ make main
ld: library not found for -lboost_regex
collect2: error: ld returned 1 exit status

这是可以理解的,因为我没有指定库路径,并且Boost安装在编译器找不到它的位置。

显然,我不想在我的Makefile中对该路径进行硬编码。否则,项目无法在其他计算机上构建。

一种解决方案是设置LD_LIBRARY_PATHthis is discouraged

普通库的“真实”解决方案是使用pkg-config,例如像这样:

LDFLAGS+=$(shell pkg-config --libs sqlite3)

...已经解决了-L/path/to/sqlite/lib -lsqlite3

的问题

不幸的是,Boost still doesn’t support pkg-config

这使我处于两难境地。似乎没有一种确定Boost库安装路径的通用方法。 其他项目如何处理此问题?

(有人建议使用环境变量BOOST_ROOT,但这似乎并不普遍存在,您需要在其中一个bashrc / profile文件中手动设置它。)

1 个答案:

答案 0 :(得分:2)

由于我是建议使用BOOST_ROOT的人,我也可以将其作为答案。

背景:如果未在boosts安装根目录内执行,则Boost的bjam构建程序需要BOOST_ROOT环境变量。
有了这个想法,人们可能还会“依赖”它,即在make被调用时要求它存在,或者将它作为一个完整的环境变量一直调用,或者只是在会话/命令期间设置它BOOST_ROOT=/foo/bar/boost make