3

我的印象是带有命名空间选项的 boost bcp 旨在为任何列出的模块重命名包含和定义。在运行该工具并检查输出后,它似乎并没有这样做。#include <boost/*>如果它们仍然存在并且期望最终用户#include <boost/*>不会引起版本冲突,我该如何重新分发它们?它只是用命名空间闭包包装这些吗?

我使用了以下 bcp 命令:

.\boost_1_53_0\dist\bin\bcp.exe --boost=boost_1_53_0 --namespace=myboost --namespace-alias smart_ptr filesystem array.hpp container move ptr_container algorithm/string.hpp tokenizer.hpp thread chrono atomic foreach.hpp build myboost

一个文件的快速 grep yield:

[boost]grep -e "boost/" algorithm\string.hpp
grep -e "boost/" algorithm\string.hpp
#include <boost/algorithm/string/std_containers_traits.hpp>
#include <boost/algorithm/string/trim.hpp>
#include <boost/algorithm/string/case_conv.hpp>
#include <boost/algorithm/string/predicate.hpp>
#include <boost/algorithm/string/find.hpp>
#include <boost/algorithm/string/split.hpp>
#include <boost/algorithm/string/join.hpp>
#include <boost/algorithm/string/replace.hpp>
#include <boost/algorithm/string/erase.hpp>
#include <boost/algorithm/string/classification.hpp>
#include <boost/algorithm/string/find_iterator.hpp>

我很确定这是带有命名空间选项的 bcp 工具的用例,但是,我显然误解了一些常见的 C++ 概念/用法,对吧?或者,也许,我错误地使用了该工具?

提前感谢您的任何见解。

4

2 回答 2

3

bcp --namespace=myboost --namespace-alias regex config build /foo

将完整的正则表达式库(在 libs/regex 中)加上配置库(libs/config)和构建系统(工具/构建)复制到 /foo,包括所有依赖项。还将 boost 命名空间重命名为 myboost 并将二进制库的文件名更改为以前缀“myboost”而不是“boost”开头。--namespace-alias 选项使 namespace boost 成为新名称的别名。

只有二​​进制文件会被重命名(libboost_regex.sowill be libmyboost_regex.so),而不是头文件。此外,命名空间boost将被替换为myboost(并且boost将是 的别名myboost)。

于 2013-06-14T06:36:48.250 回答
0

就像名字说的那样,它重命名了命名空间和库文件(即.dlls 和.libs),但不是头文件所在的目录,因此不是包含。

Boost 库通常位于namespace boost. 使用 bcp 您将命名空间更改为myboost. 因此,例如此代码变为有效:

#include <boost/sharedptr.hpp> //header directories haven't changed

myboost::shared_ptr<int> pi = myboost::make_shared<int>(5); //but the namespace has

感谢--namespace-alias您可以继续使用命名空间提升,因为boost它已成为以下名称的别名myboost

boost::shared_ptr<int> pi; //ok, this is in fact a myboost::shared_ptr

请参阅文档中的示例:http: //www.boost.org/doc/libs/1_53_0/tools/bcp/doc/html/index.html

于 2013-06-14T06:37:24.037 回答