使用Visual Studio将相关的Boost库与C++源代码一起包含

7
我正在为学校做一个项目,需要使用Boost库来解决问题。我需要一种方法将所需的Boost源代码与我的应用程序一起分发,以便在编译时不需要安装库(学校的电脑缺乏几乎所有你能想到的东西,学校去年刚刚安装了CVS,但他们确实有VS2005)。
注意:我在Vista上使用Visual Studio 2005。我在我的系统上使用了Boost 1.34.1,我使用了自动安装程序。我找到的文档说要使用BCP命令,但该命令似乎没有复制任何内容。(我使用绝对路径调用BCP,以避免调用错误的命令。)
编辑:我正在尝试使用RegEx库。
编辑:我使用的BCP命令是:"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" boost/regex.hpp regex\ 并返回:未检测到错误

你能否发布一下你用于运行bcp的命令?这可能有助于确定问题所在。 - Daniel James
6个回答

5
这取决于您使用的库。如果您使用的是头文件库(大多数boost库都是如此,但一些显著的例外是signals、serialization和date/time),那么您只需复制这些头文件。否则,您需要同时复制cpp文件。我的建议是将它们包含到您的项目中。
所以,这里是您需要做的:从您的项目设置中删除boost包含路径(工具->选项->项目和解决方案->vc++目录->包含文件)。尝试编译。查看哪个包含失败。将该文件从您的boost目录复制到您的项目目录。重复此步骤,直到您的项目编译成功。
如果您使用的是需要.cpp文件的库,则在链接时会出现错误。将您使用的库的所有.cpp文件复制到您的项目目录并将它们全部添加到您的解决方案中。重新构建并祈祷。
如需更详细的答案,请发布您正在使用的库。

我正在使用正则表达式库。 - epochwolf

2
尝试使用以下命令调用bcp:

"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" --boost="c:\Program Files\boost\boost_1_34_1" regex regex

--boost参数告诉bcp boost安装在哪里,第一个regex是模块的名称,第二个是目标目录。

如果您还没有注意到,libs\regex\build\中有Visual C++的makefile文件。


谢谢,我会尝试的。如果有任何区别的话,我使用的是标准C++,而不是微软的扩展。 - epochwolf

2
根据您使用正则表达式的评论,以下是您需要做的事情:下载“常规”boost分发zip文件。将其解压缩到某个位置。进入libs/regex/src。将该目录中的所有.cpp文件复制并粘贴到您的项目目录中。将它们添加到Visual Studio项目中(右键单击,“添加”->“现有项目项”)。然后进入boost/regex并将其中的所有内容(头文件)复制到您的项目目录中(包括子目录)。将自己的.cpp和.h文件中的所有包含从#include更改为“regex.hpp”,以便它包括来自本地目录而不是系统范围内安装的头文件。确保从项目设置中删除系统范围内的包含路径,就像我在上一篇文章中说的那样。
然后编译您的代码。您将得到许多“缺少包含文件”的错误,因为正则表达式依赖于其他boost库。重复整个过程:进入boost/xxx,其中xxx是正则表达式正在查找的库。您可以从错误消息中推断出该库。将编译器要求的所有内容复制到自己的项目目录中。在它能够工作之前,您可能需要略微调整一下目录布局。这确实是一个逐步的过程,每个步骤都相同:确定缺少的文件,复制它,看看是否找到并修复了该包含文件,并继续下一步。我恐怕这是令人无聊的工作。
您可以使用bcp自动化所有这些操作,但对于像学校项目这样的一次性项目,我不会费心;只有当您认为将来的项目需要您提供自包含的zip文件时才需要使用它。

我将来的项目可能会使用Boost。教授不介意。 - epochwolf
你可能会花费数小时来发现这样的依赖关系。bcp是一种更为可靠的方法。添加一个包含路径比编辑包含路径要好得多 - 对于某些boost子集,有成千上万个路径需要编辑。 - Roman Starkov

1

这对我来说有点奇怪。如果您正在分发源代码,那么您分发给的人应该能够安装boost。然后,如果他们已经拥有boost,则不会出现重复和混淆,或者如果他们没有并且您需要一个构建库,则他们将为其系统构建正确的库。如果您分发的人无法安装boost,那么我建议通过安装包分发二进制文件,以使他们尽可能轻松。


他说这是为了学校项目。评分作业的人不会为项目安装库,他们会花费数天时间来调整这些库以适应所有不同的学生。作业通常需要是自包含的。 - Roel
Roel 是正确的。我需要将这个库与其他源代码一起嵌入。 - epochwolf

0
编译boost真的是件麻烦的事情;只有那些有动力的学生才能完成。您考虑过打包安装程序吗?

我只是将预编译的调试库转储到正确的相对文件夹中。 - epochwolf

0

我以前就遇到过将Boost嵌入我的项目中的情况。每个Boost库都带有不同构建系统(Jam,make,Visual Studio 6等)的各种项目文件,但它们在新版本的VS上并不完美。

我总是更喜欢创建一个新的项目文件,并直接将Boost嵌入我的项目中。这很简单,你只需要添加所有的源文件并正确设置项目选项。然而,有一个注意点,那就是您必须像Boost一样命名库输出文件,因为它们的包含文件取决于此。

完成这些步骤后,您就可以像在项目中分发其他文件一样分发Boost库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接