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