分享

boost 编译选项

 oskycar 2012-12-25

一、下载编译所需类库:
    1、下载 Boost 库和编译工具 JAM。
       http://www./users/download/
       boost_1_45_0.7z、boost-jam-3.1.18.zip。
       将 boost_1_45_0.7z 解压到 D:\Boost,将 boost-jam-3.1.18.zip 解压到 D:\Boost\TempLib\JAM。
       开始-->所有程序-->Microsoft Visual Studio 2010-->Visual Studio 工具-->Visual Studio 2010 命令提示。
       命令:cd D:\Boost\TempLib\JAM
       命令:build.bat
       將生成的 bjam.exe 复制到 D:\Boost 中。

   2、下载 Regex 所需的 Unicode 支持类库 ICU。
      http://site./download
      icu4c-4_6-src.zip。
      将 icu4c-4_6-src.zip 解压缩到 D:\Boost\TempLib\ICU。
      打开 source\allinone\allinone.sln,生成 Release 版本,将 include 和 release 目录中的库文件复制到 D:\Boost\TempLib\ICU\Include 和 D:\Boost\TempLib\ICU\Lib 中。
      将编译出来的 bin 路径加入到系统 path 中,再打开 allinone.sln,分别将 cintltst、intltest、iotest 三个测试项目设置为启动项,运行测试。

   3、下载 Graph 所需的 Xml 处理类库 Expat。
      http:///projects/expat/
      expat-2.0.1.tar.gz。
      将 expat-2.0.1.tar.gz 解压到 D:\Boost\TempLib\Expat。

   4、下载 MPI 所需的 MPI 类库 Microsoft Cluster Pack SDK。
      http://www.microsoft.com/downloads/en/details.aspx?DisplayLang=en&FamilyID=d8462378-2f68-409d-9cb3-02312bc23bfd
      http://www.microsoft.com/downloads/en/details.aspx?FamilyID=48C892D9-2425-4C6B-BD9A-2650BE395E8F
      sdk_x86.msi、CCPSP1x86.msp。
      默认安装到 C:\Program Files\Microsoft Compute Cluster Pack 文件夹。

   5、下载 bzip 库。
      http://www./downloads.html
      bzip2-1.0.6.tar.gz。
      将 bzip2-1.0.6.tar.gz 解压到 D:\Boost\TempLib\bzip。

   6、下载 zlib 库。
      http://www./
      zlib-1.2.5.tar.gz。
      将 zlib-1.2.5.tar.gz 解压到 D:\Boost\TempLib\zlib。

   7、下载 python 库。
      http://www./
      python-2.5.4.msi
      将 python-2.5.4.msi 安装到 D:\Python。
//address-model=64 就是X64
二、完整编译 Boost 库:
Visual Studio 2010 命令提示
命令:cd D:\Boost

设置环境:
命令:set BZIP2_SOURCE="D:\Boost\TempLib\bzip"
命令:set ZLIB_SOURCE="D:\Boost\TempLib\zlib"
命令:set ICU_PATH="D:\Boost\TempLib\ICU"

建立bjam:
命令:bootstrap

编译boost:
编译 DLL 版本
命令:.\bjambjam --toolset=msvc --stagedir=./lib_x86 --builddir=./ address-model=32 link=shared runtime-link=shared threading=multi stage debug release
编译 LIB 版本
命令:.\bjambjam --toolset=msvc --stagedir=./lib_x86 --builddir=./ address-model=32 link=static runtime-link=shared threading=multi stage debug release

编译好的文件放置在boost根目录的lib_x86\lib目录下,在boost根目录下的bin.v2目录是中间文件,编译后删除即可。
如果需要去掉编译过程中的一些warning,可以在tools\build\v2的user-config.jam文件中加入以下这一行:
using msvc : 10.0 : : <compileflags>/wd4819 <compileflags>/D_CRT_SECURE_NO_DEPRECATE <compileflags>/D_SCL_SECURE_NO_DEPRECATE <compileflags>/D_SECURE_SCL=0 ;

等待,直至编译完成。

已成功方法:
命令:bootstrap
命令:.\bjam stage --toolset=msvc-10.0 link=static runtime-link=shared threading=multi debug release
命令:.\bjam stage --toolset=msvc-10.0 link=static runtime-link=static threading=multi debug release

其他参考语句:
命令:bootstrap
命令:bjam --without-python --toolset=msvc-10.0 --build-type=complete --prefix="d:\boost" stage


三、设定vs2010环境。(注:在2010环境下这步,在项目-->右键属性-->VC++ Directories 中去填写对应路径 ) 
  Tools -> Options -> Projects and Solutions -> VC++ Directories 
  在Library files加上d:\boost\boost_1_43_0\lib 
  在Incl e files加上d:\boost\boost_1_43_0\inclued\boost_1_43_0


测试:
1、Head-only库测试:
程序:
#include <boost/lambda/lambda.hpp>   
#include <iostream>   
#include <iterator>   
#include <algorithm>   
int main()   
{   
    using namespace boost::lambda;   
    typedef std::istream_iterator<int> in;   
    std::for_each(   
        in(std::cin), in(), std::cout << (_1 * 3) << " " );   
}   
设置:
右键单击解决方案名->属性,在弹出的窗口中 配置属性->C/C++->常规->附加包含目录,把解压boost的根目录包含进去。 可能随安装时的参数以及程序的不同,路径的设置有些不同,但要保证VS能找到文件即可。 
运行:
运行后,在控制台输入
1 2 3 <Enter> 
应输出
3 6 9

2、链接lib文件:
程序:
#include <boost/regex.hpp>   
#include <iostream>   
#include <string>   
int main()   
{   
    std::string line;   
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );   
    while (std::cin)   
    {   
        std::getline(std::cin, line);   
        boost::smatch matches;   
        if (boost::regex_match(line, matches, pat))   
            for(int i = 0; i < 3; ++i)   
                std::cout << matches[i] << std::endl;   
    }   
}   
设置:
右键单击解决方案名->属性,在弹出的窗口中 配置属性->C/C++->常规->附加包含目录,把解压boost的根目录包含进去。 配置属性->链接器->常规->附加库目录,把编译好的boost库所在目录包含进去。 可能随安装时的参数以及程序的不同,路径的设置有些不同,但要保证VS能找到文件即可。 
运行:
运行后,在控制台分别输入
Subject:My email <Enter>   
Subject:Re: My email <Enter>   
My email <Enter>
应分别输出
My email   
My email   
   


其他编译参数说明:
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、mpi等库我都用不着,所以排除之。另外,wave、graph、math、regex、test、program_options、serialization、signals这几个库编出的静态lib都非常大,所以不需要的也可以without掉。这可以根据各人需要选择,默认是全部编译。但是需要注意,如果选择编译python的话,是需要python语言支持的,应该到python官方主页http://www./下载安装。


stagedir/prefix: stage时使用stagedir,install时使用prefix,表示编译生成文件的路径。

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


link: 生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。


runtime-link: 动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。一般link只选static的话,只需要编译2种组合即可,即link=static runtime-link=shared和link=static runtime-link=static。


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


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

 

另:Boost中bjam的参数使用方法:

1.完全编译安装: 
bjam --toolset=msvc install 
完成后会生成一个bin.v2编译时的临时目录,手动删除。生成另一个目录C:\boost,里面为所有的头文件和库文件。头文件目录为boost_1_34_1\boost目录复制过去的。

2.只编译相应的库文件 
bjam --toolset=msvc stage 
完成后同样会生成bin.v2临时目录。另一个目录为stage文件,里面有对应的库文件。

3.查看需要编译才能使用的库列表 
bjam --show-libraries

4.编译特定的库,如只编译regex 
bjam --toolset=msvc --with-regex stage 
生成的库文件在stage目录中。

5.不编译某个库,如不编译regex 
bjam --toolset=msvc --without-regex stage 
生成的库文件在stage目录中。

6.编译特定的库,如只编译regex,生成debug,多线程

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多