您的位置:首页 > 其它

Boost - windows下编译boost和提取boost子集

2014-05-05 16:32 489 查看
编译boost
一.下载boost
从boost官网( http://www.boost.org )上下载最新的boost版本,现在最新是1.55版本,解压到自定义目录(为了后面好说明,这里假设为boost_1_55)

2.编译安装boost
boost_1_55目录下会有一个bootstrap.bat批处理,可以直接点击它,会在 boost_1_55\tools\build\v2文件夹下生成两个exe,b2.exe;bjam.exe,如果报
“cl”不是内部或外部命令,那么就运行visual studio 命令提示符,cd到 boost_1_55目录下运行bootstrap.bat ,如果根目录boost_1_55下没有b2.exe;bjam.exe这两个文件,从boost_1_55\tools\build\v2拷贝这两个文件到boost_1_55目录下。从cmd命令进入到boost_1_55路径下,如果你不知道如何编译,可以输入–help查看命令行帮助。
输入如下命令:

b2 toolset=msvc-10.0 architecture=x86 instruction-set=i686 address-model=32 
link=static variant=debug,release threading=multi runtime-link=shared 
--without-python --without-mpi --without-wave --without-graph 
--without-math --without-serialization stage

使用不同的命令对你使用boost也会产生很大的影响,因为CPU速度和硬盘现在都已经不是大问题了,所以本例中选择了除了不必要库的完全编译,当然了,你时间够,硬盘够,可以完全编译

b2 --toolset=msvc-10.0 --build-type=complete

命令解释
toolset:表示编译器工具,我安装的是VS2012,所以是msvc-11(如果你是VS2005,可以使用msvc-8.0 VS2008是msvc-9.0)
architecture:表示架构,也就是你的CPU架构,x86,x64,因为我安装的是win7 32位,所以使用了x86的架构
instruction-set:表示指令集,依然是8086指令集
address-model:表示地址长度为32位
link:表示生成动态/静态链接库,动态链接库是shared,静态链接库是static,一般都会编译成静态库,因为给出程序的时候打包boost的库会非常庞大
variant:表示生成的Debug或者release版本,一般情况下会两种版本都会编译出来的
threading:表示单/多线程编译,一般我们的程序都会用到多线程,所以选择了multi
runtime-link:表示动态/静态链接C/C++运行时库(C/C++ Runtime),我们选择了动态链接
without/with:表示不需要编译/需要编译哪些库,一些自己不用的库可以无需编译
stage/install:stage表示只生成库文件(DLL和Lib),install还会生成包含头文件的include
目录,推荐使用stage,因为boost_1_55\boost中就是boost库完整的头文件,所以无需再拷贝一份出来。编译出来的库会放在stage文件夹中这样一份完整的boost库就生成了,剩下就是直接使用到项目中了。

提取boost子集
bcp实用工具
bcp是一个专门用于提取Boost子集组件的工具。对于想要从Boost独立发布个人的库代码的Boost开发者,以及想根据自己的需求裁剪/定制Boost的用户来说,这是一个非常有用的工具。
生成 bcp : cd 到 tools\bcp执行 ..\..\bjam.exe
会在boost根目录下生成 dist\bin\bcp.exe
cd 到 boost根目录,
执行.\ dist\bin\bcp.exe asio Export 导出 asio
到 Export 目录中

bcp同时可以报告你的代码依赖Boost组件以及这些组件使用的licences。

bcp语法

bcp --list [options] module-list
列出module-list及其所有依赖的文件列表。

bcp [options] module-list output-path
拷贝module-list依赖的所有文件到output-path目录。

bcp --report [options] module-list html-file
输出module-list的所有依赖到html报告中。其中依赖的文件,包括:licenses、源代码和测试程序代码等。命令选项,包括:

--boost=path
设置boost代码树本地路径。如果没有指定此选项,默认会将当前路径作为Boost代码树的跟目录。

--scan
将module列表(module list)作为非boost文件,通过扫描确定对Boost的依赖,不会拷贝或列出模块列表自身相关的文件。

--svn
仅仅拷贝处于svn版本管理之下的文件。

--unix-lines
确保所有被拷贝的文件都采用unix风格的行编辑模式(line endings)。

module-list: 
当没有指定--scan选项时,用于指定待拷贝的boost文件或库名列表。这个列表可以是:

一个工具的名称:如`build`,将找到`tools/build`;
一个库的名称:如`regex`;
一个头文件的title:如`scoped_ptr`,将找到`boost/scoped_ptr.hpp`;
一个头文件的文件名:如`scoped_ptr.hpp`,将找到`boost/scoped_ptr.hpp`;
一个文件名:如`boost/regex.hpp`
当指定了--scan选项时,是一个非Boost(non-boost)的文件列表,用于扫描其对boost的依赖,这些文件将不会被拷贝或罗列。

output-path
目标文件的输出目录。

bcp使用示例

bcp scoped_ptr /foo
拷贝boost/scoped_ptr.hpp及其依赖的源码到/foo目录。

bcp boost/regex.hpp /foo
拷贝boost/regex.hpp和所有依赖的代码,包括regex源码(libs/regex/src)和构建文件(libs/regex/build)到/foo目录。但是,不会拷贝regex文档,test,或示/样例代码。

bcp regex /foo
拷贝所有regex库(libs/regex),包括依赖的代码(比如,regex测试程序依赖的boost.test源码)到/foo。

bcp regex config build /foo
拷贝所有regex库(libs/regex),附加config库(libs/config)和构建系统(tools/build)以及所有的依赖代码到/foo。(这个非常有用)

bcp --scan --boost=/boost foo.cpp bar.cpp boost
扫描非boost文件foo.cpp和bar.cpp对boost的依赖代码。同时,将其拷贝到子目录boost下。(在不明确依赖关系的情况下,这个模式非常有用)

bcp --report regex.hpp boost-regex-report.html
为Boost模块regex.hpp创建一个名为boost-regex-report.html的HTML报告文件。此报告包含,license信息,作者明细和文件依赖。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息