c++ - 在 Makefile 中查找 Boost 库

标签 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_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/

相关文章:

c++ - boost::optional 与 boost::make_optional

c++ - Boost - 链接期间的多个定义

c - 如何在从多个目录/文件编译内核模块时创建新目录并将 .o 文件移动到其中

makefile - :C colon-C mean in FreeBSD make? 是什么意思

python - pybind11:如何使用上下文管理器实现

c++ - 类型衰减——它是什么以及为什么会存在?

c++ - 如何使用Boost解析ini文件

linux - 使 : *** No targets specified and no makefile found. 停止

c++ - 确定 NFS 服务器中已提交作业的状态

c++ - 如何在 C++ 中将字符串拆分为不同的数据类型