我正在尝试创建包含文件系统模块的boost库的子集,因此我可以在项目存储库中包含该子集.我收到链接器错误,直到我手动复制.lib文件.我在Windows 7 64位上使用Visual Studio 2013.
我已经使用bcp成功提取了boost/algorithm/string.hpp及其依赖项,使用以下步骤:
从boost.org下载(v 1.57.0).
提取.
然
bootstrap.bat
Run Code Online (Sandbox Code Playgroud)
然后
b2.exe
Run Code Online (Sandbox Code Playgroud)
(我不知道b2是否对我的目的是必要的.)
通过打开命令提示符来构建bcp工具,我在其中提取了boost存档,然后运行
bjam tools\bcp
Run Code Online (Sandbox Code Playgroud)
作为描述在这里.
通过运行创建boost库子集
dist\bin\bcp.exe algorithm/string.hpp [outdir]
Run Code Online (Sandbox Code Playgroud)将结果复制到我的项目下的子文件夹中,将boost目录添加到C++ include搜索路径,并构建项目.
...
当我将filesystem或filesystem.hpp添加到上面的命令时(即使我在我自己的源文件中使用--scan选项),并将结果复制到我的项目文件夹,然后尝试包含"boost/filesystem.hpp",我明白了
LINK : fatal error LNK1104: cannot open file 'libboost_system-vc120-mt-gd-1_57.lib'
Run Code Online (Sandbox Code Playgroud)
在*.libbcp的输出中找不到文件.为了得到它来建立,我不得不手动复制libboost_system-*.lib和libboost_filesystem-*.libLIB \文件从舞台\我的项目(并添加包含他们项目属性目录- >配置属性- >链接器- >常规- >附加库目录).
这是bcp没有复制所需内容的预期行为吗?还是我错过了一步?或者它是一个bcp bug?
Emi*_*rke 16
bcp只会复制源文件,因此您必须从bcp生成的源树中再次构建库.所以是的,这是预期的行为,是的,你错过了一步.:)
我不认为这是bcp本身的错误,但生成Boost子集的过程肯定不是特别用户友好的.见下文.
如果你得到需要编译的依赖项(例如boost/system),你还需要包含能够在新的源代码树中构建所需的东西.的依赖似乎加速版本之间改变,但通过试验和错误我发现,对于1.57你需要添加build,bootstrap.bat,bootstrap.sh,boostcpp.jam和boost-build.jam在BCP命令,这样就可以在新的源树进行构建:
dist\bin\bcp.exe algorithm/string.hpp build bootstrap.bat bootstrap.sh boostcpp.jam boost-build.jam [outdir]
编辑:根据Boost版本,您可能还需要添加config到上面的行以防止构建错误(由Sebastian Marsching建议).- 结束编辑
然后,这也仿佛置身于构建脚本中的错误,你有你的新生成的树打开顶层的Jamfile和注释掉或删除这两个use-project提及行/boost/tools/inspect和/boost/libs/wave/tool.否则,找不到这些目录的失败将破坏构建.当然,另一个选择是在bcp命令行中包含工具/检查和波形,但是它们带来了很多依赖性,所以除非你需要这些特定的工具/库,否则我不建议这样做.
然后,您需要为自己的项目添加构建步骤以构建库,使用与构建完整Boost包相同的过程(即您的步骤3,但在"缩小"的源代码树中).
如果需要,可以将已构建的b2和bjam二进制文件添加到源树而不是引导步骤,但是只能在可以运行这些二进制文件的平台上构建.
顺便说一下,你的第三步中的"b2"部分确实没有必要.