在构建过程中包含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但设置this 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文件之一中手动设置它。)

最佳答案

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

背景:Boost的bjam构建程序如果未在boosts安装根目录内执行,则需要BOOST_ROOT环境变量。
考虑到这一点,人们可能会“依赖”它,即要求在将make调用时始终将其作为完整的环境变量,或者只是在 session /命令期间像BOOST_ROOT=/foo/bar/boost make进行设置一样将其存在。

关于c++ - 在Makefile中查找Boost库,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12212940/

10-11 00:20