windows下使用bjam安装Boost

一. 获取Boost:

从Boost官方网站或sourceforge下载某一版本的Boost。这里下载的是boost 1.50.0,将Boost解压到"D:\SDK\boost_1_50_0"。

进入"D:\SDK\boost_1_50_0\tools\build\v2",执行bootstrap.bat批处理文件,生成b2.exe和bjam.exe两个Build文件。

将"bjam.exe"复制到boost根目录下("boost_1_50_0")。

二. 编译Boost:

打开CMD或"Visual Studio 命令提示(2010)",进入到bjam.exe所在目录下。

按造需求,有选择的执行以下命令:

1.完全编译安装:

bjam toolset=msvc-10.0 install

完成后会生成一个bin.v2编译时的临时目录,手动删除。生成另一个目录C:\boost,里面为所有的头文件和库文件。头文件目录为boost_1_50_0\boost目录复制过去的。

2.只编译相应的库文件:

bjam toolset=msvc-10.0 stage

完成后同样会生成bin.v2临时目录。另一个目录为stage文件,里面有对应的库文件。

3.编译特定的库,如只编译regex

bjam toolset=msvc-10.0 --with-regex stage

生成的库文件在stage目录中。

4.不编译某个库,如不编译python

bjam toolset=msvc-10.0 --without-python stage

生成的库文件在stage目录中。

5.按条件编译正则(regex)库

bjam toolset=msvc-10.0 --with-regex stage debug release threading=multi threading=single link=shared link=static runtime-link=shared runtime-link=static

toolset=msvc-10.0:Viusal Studio 2010,如果是2008的话就是9.0,2005就是8.0
variant=debug,release 生成哪些库文件。可以单选release也行的
threading=multi:多线程支持
runtime-link=static:静态库
--prefix:头文件和库文件的生成目录

下面详细解释一下每个参数的含义,请务必仔细看完:

参数名 解释
stage/install stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。本人推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录(D:\SDK\boost_1_50_0\boost,只比include目录多几个非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。
--stagedir 配合stage时使用,指定编译生成文件的路径。默认路径为当前路径下的"./stage"文件夹。
--prefix 配合install时使用,指定编译生成文件的路径。在Win32默认为"C:\Boost";在Unix/Linux上默认为"/usr/local"。推荐给不同的IDE指定不同的目录,如VS2010对应的是D:\SDK\boost_1_50_0\vc10\lib,否则都生成到一个目录下面,难以管理。如果使用了install参数,那么还将生成头文件目录,vc10对应的就是D:\SDK\boost_1_50_0\vc10\include\boost-1_50\boost。
--exec-prefix= 安装体系结构所依赖的文件
--libdir= 指定库文件安装目录
--includedir= 指定头文件安装目录
--with-/--without- 选择编译/不编译哪些库。本人不需要编译python库,所以排除之,可以根据各人需要选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,应该到python官方主页http://www.python.org下载安装。
--help 显示帮助信息。
--build-dir=DIR 编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录(D:\SDK\boost_1_50_0)下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。
--show-libraries 显示需要编译才能使用的Boost库列表。
toolset 指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-10.0(VS2010)等。
link=static|shared 生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用 static方式。这里需要注意的是,static方式下,最终生成的很多静态链接库大小都在几兆、几十兆,甚至接近百兆。这么大的库我们一般是不会采用静态链接方式的,所以这些库不推荐以static方式编译(without掉);如果已经编译了赶快删,肯定没用,否则将占用近1G的硬盘空间。以下是巨型库黑名单:wave、graph、math、regex、test、program_options、serialization、signals。
runtime-link=static|shared 动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式。虽然它和link属性没有直接关系,但我们习惯上,一个工程如果用动态链接那么所有库都用动态链接,如果用静态链接那么所有库都用静态链接。所以这样其实只需要编译2种组合即可,即link=shared runtime-link=shared和link=static runtime-link=static。
threading=single|multi 单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。
variant=debug|release 编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

本人按以上方式分别编译了静态链接和动态链接两个版本后,整个D:\SDK\boost_1_50_0目录(包括安装包解压缩文件和编译生成的库文件)只有250MB。事实上编译完成后安装包解压缩文件除了boost目录之外其他目录和文件已经可以删除了,这样还可以腾出150MB的空间来。不过我又研究了一下,其实libs这个目录也很有用,它提供了所有Boost类的使用范例,平时可以作为参考;另外doc目录是一个完整的boost使用帮助文档,当然最好也不要删了。这样剩下的几个目录和文件加起来也就十多兆,索性都给它们留一条生路吧。

直接指定编译器以完全模式编译即可,这样可以满足今后的一切使用场合,但同时带来的后果是:

  1. 占用空间大,编译时间长
  2. 头文件和库文件生成到C:\Boost

三. 在VS里配置Boost

包含(include)目录:D:\SDK\boost_1_50_0
库(library)目录:D:\SDK\boost_1_50_0\vc10\lib
添加到IDE相应的路径下面即可。

PS: vs2010编译器为msvc-10.0, vs2013编译器为msvc-12.0. 编译python之前需要设置python的环境变量,否则找不到文件'pyconfig.h'.

你可能感兴趣的:(tools)