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

时间:2020-03-06 14:50:43  来源:igfitidea点击:

我有一个正在研究的项目(用于学校),正在研究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 \

它返回:"未检测到错误"

解决方案

这取决于我们使用的库。如果我们使用的是仅标头的库(大多数Boost库都是,某些明显的例外是信号,序列化和日期/时间),则只需复制这些标头文件即可。否则,我们也需要复制cpp文件。我的建议是只将它们包含在项目中。

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

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

有关更详细的答案,请发布我们正在使用的库。

我之前曾遇到过,将boost嵌入到我的项目中。每个单独的boost库都带有用于使用不同的make系统(Jam,make,Visual Studio 6 ...)进行构建的各种项目文件,但是对于VS的较新版本却从未如此出色。

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

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

这对我来说似乎有些奇怪。如果我们要分发源代码,那么我们要分发的人员应该能够安装boost。然后,如果它们已经具有增强功能,就不会有重复和混乱,或者如果没有,并且我们需要构建的库,则他们将为他们的系统构建正确的库。如果我们要分发的人员不愿意安装boost,那么我建议我们将二进制文件分发到安装包中,以使其对他们来说尽可能简单。

尝试使用以下命令调用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 ++生成文件。

根据我们使用正则表达式的评论,我们可以执行以下操作:下载"常规" boost发行zip文件。将其解压缩。转到libs / regex / src。复制该目录中的所有.cpp文件并将其粘贴到项目目录中。将它们添加到Visual Studio项目中(右键单击"添加"->"现有项目")。然后转到boost / regex,并将其中的所有内容(头文件)复制到项目目录(包括子目录)中。将我们自己的.cpp和.h文件中的所有包含从#include更改为" regex.hpp",以便它包含本地目录中的标头,而不是系统范围内安装的标头。请确保从项目设置中删除系统范围内的包含路径,就像我在上一篇文章中所说的那样。

然后,编译代码。由于正则表达式依赖于其他Boost库,因此我们会遇到许多"缺少包含文件"错误。重复整个过程:转到boost / xxx,其中xxx是正则表达式正在寻找的库。我们可以从错误消息中推断出库。将编译器要求的所有内容复制到我们自己的项目目录中。在工作之前,我们可能需要弄乱目录的布局。这实际上是一种逐步的方法,每个步骤都是相同的:识别丢失的文件,将其复制过来,查看是否找到并修复了该包含的文件,然后继续下一步。恐怕这很无聊。

我们可以使用bcp自动化所有这些,但是对于像学校项目这样的一次性项目,我不会打扰;仅在我们认为将来会有需要我们交付自包含zipfile的项目时。

就是这样的PITA来编译boost;只有有上进心的学生才能做到这一点。我们是否考虑过捆绑安装程序?