在构建过程中包含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/