在Makefile中查找Boost库

Find Boost libraries in Makefile

本文关键字:Boost 查找 Makefile      更新时间:2023-10-16

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

…,其被分解为沿着CCD_ 3的线的东西。

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

这让我左右为难。似乎没有一种通用的方法来确定Boost库的安装路径其他项目如何处理此问题

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

既然我是建议使用BOOST_ROOT的人,我不妨把它作为一个答案。

背景:Boost的bjam构建程序需要一个BOOST_ROOT环境变量,如果它没有在Boost安装根目录中执行的话
有了这种想法,我们还可以"依赖"它,即当make被调用时,要求它始终作为一个完整的环境变量,或者在会话/命令(如BOOST_ROOT=/foo/bar/boost make)期间设置它。