如何使用BCP提取可以构build的Boost的子集?

我正在尝试在Boost中使用bcp工具来提取要在我的项目中使用的标题/库的子集。

  • 操作系统:Linux Ubuntu 12.04 LTS x64
  • Boost版本:1.56.0,作为boost.org的源代码下载

我也想使用一个自定义的命名空间,这个自定义的命名空间是由bcp提供的,但是生成的代码需要被编译,而这不是那么直截了当。

我会想到一个简单的

./dist/bin/bcp --namespace=myboost build filesystem ../myboost 

足以产生一组可以build立“文件系统”库的文件,但似乎还有一些问题正在不断出现。

我已经阅读了所有可以find的networking上的相关post,但没有一个提出了可行的解决scheme。

我遵循的步骤和相应的错误消息在下面详述。


解压boost 1.56.0 tarball之后,我做了以下工作:

 ./bootstrap.sh ./b2 tools/bcp mkdir ../myboost ./dist/bin/bcp --namespace=myboost build filesystem ../myboost 

复制到../myboost中的文件不包含bootstrap.sh,b2,bjam或其他* .jam文件,这些文件似乎是“构build”目标应包含的东西,对吧?

其他来源(包括stackoverflowpost)build议从原来的提升位置复制这些文件:

 cp bootstrap.sh boost-build.jam boostcpp.jam ../myboost cd ../myboost ./bootstrap.sh 

这然后build立b2和bjam好的。

当运行b2时,事情会崩溃:

 ./b2 /work/approved-osslibs/boost/boost-1.56.0/myboost/tools/build/src/build /project.jam:262: in find-jamfile from module project error: Unable to load Jamfile. error: Could not find a Jamfile in directory 'tools/inspect/build'. error: Attempted to find it with pattern '[Bb]uild.jam [Jj]amfile.v2 [Jj]amfile [Jj]amfile.jam'. error: Please consult the documentation at 'http://www.boost.org'. <error backtrace lines snipped> 

所以这意味着我的“构build”工具依赖于“检查”,所以我们回头复制:

 cd ../boost_1_56_0 ./dist/bin/bcp --namespace=myboost inspect ../myboost cd ../myboost ./b2 

这会导致错误:

 /work/myboost/tools/build/src/build/project.jam:262: in find-jamfile from module project error: Unable to load Jamfile. error: Could not find a Jamfile in directory 'libs/wave/tool/build'. error: Attempted to find it with pattern '[Bb]uild.jam [Jj]amfile.v2 [Jj]amfile [Jj]amfile.jam'. error: Please consult the documentation at 'http://www.boost.org'. <error backtrace lines snipped> 

所以这意味着“build设”也取决于波…

 cd ../boost_1_56_0 ./dist/bin/bcp --namespace=myboost wave ../myboost cd ../myboost ./b2 

在哪一点我遇到这个错误:

 /work/myboost/tools/build/src/build/targets.jam:397: in find-really *** argument error * rule project.is-registered-id ( id ) * called with: ( ) * missing argument id /work/myboost/tools/build/src/build/project.jam:600:see definition of rule 'project.is-registered-id' being called <error backtrace lines snipped> 

我发现这个特定的错误与在这个票据中引用的boost文件系统库有关,但是应该已经被修复了,所以我不期望在最新版本的Boost 1.56.0中看到它。

到底是怎么回事?

为什么不能为一个boost库创build一个可执行的构build系统?

为什么build立依赖于检查和波,这将增加更多的标题提取“myboost”比应该是必要的?

任何帮助这个问题将不胜感激。

当我今天用Boost 1.64(我在MS Windows下用MSVC编译)时遇到了一些问题。 顺便指点一下,顺便说一下。

  • 从原始Boost目录中的bootstrap.batb2 -j 8 tools\bcp开始。 (在这里,以及下面,将同时运行的作业数替换为8 )。
  • 当运行.\dist\bin\bcp ,我发现我必须在我的命令行中包含tools\build\srclibs\config\checks\architecture ,以便以后的构建工作。
  • 我还必须复制bootstrap.batboost-build.jamboostcpp.jam到我的复制 – 提升目录。
  • 我不知道为什么,但我不得不重新命名我原来的Boost目录(即运行bcp的那个目录),否则构建会以某种方式结束。

之后,切换到我的复制 – 提升目录并运行bootstrap.bat允许我创建Boost的精简版,并更改了顶级命名空间。

b2 -j 8 toolset=msvc-10.0 threading=multi link=shared address-model=32 variant=debug

b2 -j 8 toolset=msvc-10.0 threading=multi link=shared address-model=32 variant=release

move stage\lib lib32-msvc-10.0