VS2008下编译BOOST 1.39库使用

1. boost库到www.boost.org上下载。

 

2. 将其解压到D:/boost_1_39_0(根据需要自己选择目录)。

 

3. 直接运行D:/boost_1_39_0/tools/jam/build_dist.bat(没有使用运行VS2008的命令提示行,进入D:/BOOST_139/tools/jam;执行build_dist.bat该方法)这样就产生了bjam.exe。

 

4. 将D:/boost_1_39_0/tools/jam/stage/bin.ntx86/bjam.exe拷贝到D:/boost_1_39_0这个目下。

 

5. 在D:/boost_1_39_0下创建bootstrap_vs2008.bat(名称随便),内容如下:bjam --build-type=complete --with-regex --toolset=msvc-9.0 --stagedir="D:/boost_1_39_0/vc9" stage (我只需要regex库,生成库路径D:/boost_1_39_0/vc9)。想用其它的库:bjam --build-type=complete --with-thread --toolset=msvc-9.0 --stagedir="D:/boost_1_39_0/vc9"stage(想用thread库)。

 

6. 设置路径。启动vs2008,打开"工具"-》"选项",选择"项目和解决方案"->"vc++ 目录",将D:/boost_1_39_0/vc9/lib和D:/boost_1_39_0分别添加到库文件和包含文件中。

 

7. 下面详细解释一下每个参数的含义
stage/install:stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。本人推荐使用stage,因为install生成的这个include目录实际就是boost安装包解压缩后的boost目录(E:/SDK/boost_1_39_0/boost,只比include目录多几个非hpp文件,都很小),所以可以直接使用,而且不同的IDE都可以使用同一套头文件,这样既节省编译时间,也节省硬盘空间。


toolset:指定编译器,可选的如borland、gcc、msvc(VC6)、msvc-9.0(VS2008)等。


without/with:选择不编译/编译哪些库。本人不需要编译python库,所以排除之,可以根据各人需要选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,应该到python官方主页http://www.python.org下载安装。


stagedir/prefix:stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。推荐给不同的IDE指定不同的目录,如VS2008对应的是D:/boost_1_39_0/vc9/lib,VC6对应的是D:/boost_1_39_0/vc6/lib,否则都生成到一个目录下面,难以管理。如果使用了install参数,那么还将生成头文件目录,vc9对应的就是D:/boost_1_39_0/vc9/include/boost-1_39/boost,vc6类似(光这路径都这样累赘,还是使用stage好)。


build-dir:编译生成的中间文件的路径。这个本人这里没用到,默认就在根目录(D:/boost_1_39_0)下,目录名为bin.v2,等编译完成后可将这个目录全部删除(没用了),所以不需要去设置。


link:生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。这里需要注意的是,static方式下,最终生成的很多静态链接库大小都在几兆、几十兆,甚至接近百兆。这么大的库我们一般是不会采用静态链接方式的,所以这些库不推荐以static方式编译(without掉);如果已经编译了赶快删,肯定没用,否则将占用近1G的硬盘空间。以下是巨型库黑名单:wave、graph、math、regex、test、program_options、serialization、signals。


runtime-link:动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式。虽然它和link属性没有直接关系,但我们习惯上,一个工程如果用动态链接那么所有库都用动态链接,如果用静态链接那么所有库都用静态链接。所以这样其实只需要编译2种组合即可,即link=shared runtime-link=shared和link=static runtime-link=static。


threading:单/多线程编译。一般都写多线程程序,当然要指定multi方式了;如果需要编写单线程程序,那么还需要编译单线程库,可以使用single方式。


debug/release:编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

 

 

8.实例:

 

#include <iostream>
#include <cassert>
#include <string>
#include "boost/regex.hpp"

int main()

{

    // 3 digits, a word, any character, 2 digits or "N/A",

    // a space, then the first word again

    boost::regex reg("//d{3}([a-zA-Z]+).(//d{2}|N/A)//s//1");

 

    std::string correct="123Hello N/A Hello";

    std::string incorrect="123Hello 12 hello";

 

    if (boost::regex_match(correct,reg))

    {

        std::cout << "Match";

    }

 

    if (boost::regex_match(incorrect, reg))

    {

        std::cout <<"Don't match";

    }

}

 

补充下,编译静态库:

bjam --toolset-msvc-9.0 --build-type=complete --without-python --prefix="D:/boost_1_39 
_build" link=static runtime-link=static threading=multi 如果runtime-link=static只能在Use MFC in a Static Library下使用, 但如果设置为runtime-link=share就可以使用Use MFC in a Shared DLL。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值