C++ 如何使用BCP提取可以构建的Boost子集?
我正试图在Boost中使用提取头/库的子集,以便在我的项目中使用C++ 如何使用BCP提取可以构建的Boost子集?,c++,linux,boost,build,C++,Linux,Boost,Build,我正试图在Boost中使用提取头/库的子集,以便在我的项目中使用 操作系统:Linux Ubuntu 12.04 LTS x64 Boost版本:1.56.0,下载为 源代码来自boost.org 我也想使用bcp提供的自定义名称空间,但需要构建生成的代码,这并不像应该的那样简单 我会想到一个简单的办法 ./dist/bin/bcp --namespace=myboost build filesystem ../myboost 这就足以生成一组可以构建“文件系统”库的文件,但似乎还有额外的
- 操作系统:Linux Ubuntu 12.04 LTS x64
- Boost版本:1.56.0,下载为 源代码来自boost.org
./dist/bin/bcp --namespace=myboost build filesystem ../myboost
这就足以生成一组可以构建“文件系统”库的文件,但似乎还有额外的问题不断出现
我已经在网上读了很多相关的文章,但是没有一篇能提供有效的解决方案
下面详细介绍了我遵循的步骤和相应的错误消息
提取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文件,这些文件似乎是“构建”目标应该包括的,对吗
其他来源(包括stackoverflow帖子)建议从原始boost位置复制这些文件:
cp bootstrap.sh boost-build.jam boostcpp.jam ../myboost
cd ../myboost
./bootstrap.sh
然后构建b2和bjam ok
运行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>
这会导致错误:
/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>
在这一点上,我遇到了以下错误:
/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>
/work/myboost/tools/build/src/build/targets.jam:397:in find real
***参数错误
*规则project.is-registered-id(id)
*调用时使用:()
*缺少参数id
/work/myboost/tools/build/src/build/project.jam:600:请参阅正在调用的规则“project.is registed id”的定义
我发现了与中引用的boost文件系统库相关的这个特定错误,但这个错误应该已经修复,所以我不希望在boost 1.56.0(最新版本)中看到它
发生了什么事
为什么bcp不能为一个boost库创建一个可执行的构建系统
为什么构建依赖于inspect和wave,它们为提取的“myboost”添加了比所需多得多的头文件
在此问题上的任何帮助都将不胜感激。我今天尝试使用Boost 1.64(我在MS Windows下使用MSVC 2010进行编译)进行此操作时遇到了许多问题。顺便说一句,谢谢你给我指明了正确的方向
- 从原始Boost目录中的
和bootstrap.bat
开始。(此处以及下面,将b2-j8 tools\bcp
替换为同时运行的作业数。)8
- 当运行
时,我发现我必须在命令行中包含\dist\bin\bcp
和tools\build\src
,以便以后的构建工作libs\config\checks\architecture
- 我还必须将
、bootstrap.bat
和boost build.jam
复制到我复制的boost目录中boostcpp.jam
- 我不知道为什么,但我不得不重命名我原来的Boost目录(即运行
的目录),否则构建将以某种方式返回到那里bcp
bootstrap.bat
允许我构建精简版的boost,并更改顶级名称空间
b2-j 8工具集=msvc-10.0线程=多链接=共享地址模型=32变量=调试
b2-j 8工具集=msvc-10.0线程=多链接=共享地址模型=32变量=发布
move stage\lib lib32-msvc-10.0
这似乎只是使用Boost 1.55.0的Boost 1.56.0出现的问题,“bcp build filesystem../myboost”在myboost中生成所有必要的文件并成功构建OK。我最近也经历了同样的“打鼹鼠”游戏。我发现我必须手动添加libschrono
、inspect
、system
和wave
,才能让它工作。我只能猜测当前版本的bcp不太擅长识别Boost组件之间的可传递依赖关系。不管怎样,加上另外两个lib(就像你在wave
和inspect
中所做的那样)就足以让它对我起作用了。我说得太快了。事实证明,我还需要做一个cp-a$BOOST\u ROOT/BOOST/atomic$TARGET\u DIR/BOOST
来编译所有的东西。我不知道是不是我做错了™, 但这是我使用bcp
的典型经验:它永远不会完全正确地获取依赖项,因此您必须始终进行一些手动复制,以恢复丢失的标题,或者第二次调用它时使用它丢失的lib的显式列表。仍然是一个有用的工具!
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>