3

在构建过程中包含 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_PATH,但不鼓励这样做

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

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

......这被解决为类似的东西-L/path/to/sqlite/lib -lsqlite3

不幸的是,Boost 仍然不支持pkg-config.

这让我进退两难。似乎没有确定 Boost 库安装路径的通用方法。其他项目如何处理这个问题?

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

4

1 回答 1

2

由于我是建议使用的人BOOST_ROOT,因此我不妨将其作为答案。

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

于 2012-08-31T10:05:17.720 回答