使用C ++源包含相关的Boost库(使用Visual Studio)

时间:2008-09-28 13:26:20

标签: c++ visual-studio boost

我有一个我正在研究的项目(学校),我正在挖掘Boost库中的解决方案。我需要一些方法来为我的应用程序分发所需的Boost源代码,以便可以编译它而不需要在进行编译的系统上安装库。 (学校的计算机几乎没有你能提到的任何东西。学校去年安装了CVS。但他们确实有VS2005)

注意:我在Vista上使用Visual Studio 2005。我在我的系统上使用了Boost 1.34.1我使用了automatic installer。我遇到的文档说明了使用BCP命令,但该命令似乎没有复制任何东西。 (我使用绝对路径来调用BCP,所以我最终不会调用错误的命令。)

编辑:我正在尝试使用RegEx库。

编辑:我用于BCP的命令是:"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" boost/regex.hpp regex\

它返回:no errors detected

6 个答案:

答案 0 :(得分:5)

这取决于您正在使用的库。如果你使用的是一个只有头文件库(大多数的boost库,有一些值得注意的例外是信号,序列化和日期/时间),你可以只复制这些头文件。否则你也需要复制cpp文件。我的建议是将它们包含在你的项目中。

所以,这就是您所做的:从项目设置中删除boost include路径(工具 - >选项 - >项目和解决方案 - > vc ++目录 - >包含文件)。尝试编译。看哪个包含失败。将该文件从boost目录复制到项目目录。泡沫,冲洗,重复,直到你的项目编译。

如果您使用的是需要.cpp文件的库,则链接时会出错。将您使用的库的所有.cpp文件复制到项目目录中,并将它们全部添加到您的解决方案中。重建和交叉手指。

如需更详细的解答,请发布您正在使用的图书馆。

答案 1 :(得分: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。

答案 2 :(得分:2)

根据你的注释,你正在使用正则表达式,这是你做的:下载'普通'提升分发zip文件。解压缩到某个地方。转到libs / regex / src。将该目录中的所有.cpp文件复制并粘贴到项目目录中。将它们添加到Visual Studio项目中(右键单击,'添加' - >'现有项')。然后转到boost / regex并将其中的所有内容(头文件)复制到项目目录(包括子目录)。将您自己的.cpp和.h文件中的所有包含从#include更改为“regex.hpp”,以便它包含本地目录中的标题,而不是系统范围内安装的标题。确保从项目设置中删除系统范围的包含路径,就像我在上一篇文章中所说的那样。

然后,编译你的代码。你会得到一些'缺少包含文件'的错误,因为正则表达式依赖于其他的boost库。重复整个过程:转到boost / xxx,其中xxx是regex正在寻找的库。您可以从错误消息中推断出库。将编译器要求的所有内容复制到您自己的项目目录中。在工作之前,您可能需要对目录布局进行一些调整。这是一个逐步的方法,每个步骤都是相同的:识别丢失的文件,将其复制,查看是否找到并修复了包含,然后继续下一步。我担心这是无聊的工作。

你可以用bcp自动化这一切,但对于像学校项目这样的一次性项目,我不会打扰;只有当你认为你将来有需要你提供一个独立的zip文件的项目时。

答案 3 :(得分:1)

这对我来说有点奇怪。如果您要分发源代码,那么您要分发的人员应该能够安装boost。然后,如果他们已经有了提升,没有重复和混乱,或者如果他们没有,你需要一个构建的库,他们将为他们的系统构建正确的库。如果您分发的人员不能安装boost,那么我建议在安装包中分发二进制文件,以使它们尽可能简单。

答案 4 :(得分:0)

我之前遇到过这种情况,将增强功能嵌入到我的项目中。每个单独的boost库都带有各种项目文件,用于构建不同的make系统(Jam,make,Visual Studio 6 ...)但是对于新版本的VS来说它们永远不会那么棒。

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

完成此操作后,您可以像生成项目中的任何其他文件一样分发boost库。

答案 5 :(得分:0)

这是一个编译提升的PITA;只有积极进取的学生才能做到。您是否考虑过捆绑安装程序?