【发布时间】:2009-10-01 23:29:08
【问题描述】:
【问题讨论】:
标签: c++ visual-studio boost
【问题讨论】:
标签: c++ visual-studio boost
Boost 有一个非常好的工具,名为bcp,它可以满足您的需求。看看吧。
来自文档:
bcp boost/regex.hpp /foo
Copies boost/regex.hpp and all dependencies including the regex source code
(in libs/regex/src) and build files (in libs/regex/build) to /foo. Does not
copy the regex documentation, test, or example code.
【讨论】:
唯一需要注意的是在包含路径中添加要提升的路径。尽管这些库只是标头,但许多 boost 标头包含 boost 库中的其他标头,如果您没有正确设置包含路径,将无法找到它们。
我当前的项目有这个包含路径:
/I "C:\Program Files\boost\boost_1_39"
然后我的代码会包含这样的 boost 标头:
#include <boost/random.hpp>
boost/random.hpp 有一堆像 #include "boost/random/linear_congruential.hpp" 这样的行,这就是你需要包含路径的原因。
【讨论】:
大多数 boost 都作为“仅标头”库分发 - 这意味着您无需“构建”任何类型的东西即可使用该库。 Random 就是其中之一,因此可以只包含正确的头文件,您会大笑的。我会说最好在某个地方获取整个 boost 源,并引用它,因为不同的部分往往相互依赖。
【讨论】:
是的,大多数 boost 库只是头文件,因此您不需要编译任何源文件。
【讨论】:
是的,要使用boost::random,您只需在源文件中包含标头即可。
由于 Boost 广泛使用模板,许多库纯粹在标头中实现(以及模板实现文件,如 txx)。
大多数库也是独立的,因此您可以只使用一个而不依赖另一个。 (记录了例外情况。)
如果您查看list of Boost libraries,您会看到其中许多标记为“仅标题”,因此没有可链接的其他库。
【讨论】:
我将如何只使用这个并且只使用这个库
我不确定您的顾虑是什么。即使您包含其他头文件和/或链接其他库,您的最终可执行文件也将仅包含解析代码中的符号所需的库的那些部分。它不会抛出未使用的对象模块。除非被引用,否则标题中的内联代码和模板不会被实例化。
由于 Boost 主要是一个模板库,并且为了解决大多数链接器中缺乏模板意识的问题,代码被内联在头文件中,实例化的模板被编译到实例化它的每个对象模块中。因此,您最终可能会在多个模块中出现重复代码,如果您担心可执行文件大小,您或许应该注意这一点。
【讨论】: