Windows下编译Boost并配置CodeBlocks和VisualStudio

 

Windows下编译Boost并配置CodeBlocks和VisualStudio

1 Must Know Before Installation

Boost官网
Boost是个跨平台的库,完全编译(并不是说包含所有的包而是包含支持各种编译器的完整编译,例如GCC MSVC Borland……)据说要占用空间10G以上并且花费很长时间,但对于学习来说完全没有必要,因为我们只需要使用一种编译器就可以。
在我的PC Windows系统上有GCC编译器(安装CodeBlocks时带的MinGW编译器)和MS的MSVC编译器(安装Visual Studio 2008时带的),下面我要做的是安装适合GCC和MSVC的Boost版本,并配置C::B和VS08使其能够编译Boost程序。
至于Linux上的还没有试过,改天配置成功了再来修改此文。

2 编译参数含义

我在用GCC编译时用的命令是 bjam install –toolset=gcc –without-graph –without-graph_parallel –without-mpi –without-serialization –without-wave –prefix="D:\boost_1_47_0\VC9" link=static runtime-link=shared runtime-link=static threading=multi debug release
参数含义具体含义如下:

  1. install/stage: install会生成包含头文件的include目录,stage表示只生成库(dll和lib)无Include目录(可以使用原本就有的booost_1_47目录下的boost目录)。我这里面用install命令,生成的include只有几十M不会占用太大空间。
  2. toolset编译器选项可以是gcc、msvc、borland……
  3. without表示不安装某些库(因为我在学习Python所以我这里安装了python库,安装Python库需要首先安装Python解释器,您如果不需要的话可以添加–with-python来取消安装python库)
  4. prefix/stagedir 前面使用install时用prefix,用stage时用stagedir,表示编译生成文件的路径,我这里是在D:\boost_1_47下的GCC目录,您可以根据自己的偏好更好,同样配置C::B和VS时的也要相应地更改。
  5. build-dir 编译过程中间文件存放目录,默认是bjam目录下的bin.v2,等编译完成后便可删掉该文件(我用两个编译器编译后生成的中间文件有1G多)
  6. threading 一般是多线程所以multi(如果您不写多线程程序的话这里可以不用设置)
  7. link 生成动态链接库/静态链接库。生成动态链接库需使用shared方式,生成静态链接库需使用static方式。一般boost库可能都是以static方式编译,因为最终发布程序带着boost的dll感觉会比较累赘。
  8. runtime-link 动态/静态链接C/C++运行时库。同样有shared和static两种方式,这样runtime-link和link一共可以产生4种组合方式,各人可以根据自己的需要选择编译。一般link只选static的话,只需要编译2种组合即可,即link=static runtime-link=shared和link=static runtime-link=static,本人一般就编这两种组合。
  9. debug/release 编译debug/release版本。一般都是程序的debug版本对应库的debug版本,所以两个都编译。

3 根目录下的文件

doc 里面是boost的官方帮助文档
libs 里面有示例代码和帮助信息
more 是more information 关于boost政策等信息
tools 工具

4 Windows

去Boost官网下载,我下载的是1.47版本7z压缩版,大小约为40M,将解压后的文件放在D盘根目录下,现在得到的目录结构应该是这样的:D盘根目录下有boost_1_47文件夹,boost_1_47下包含有Boost、doc、status等文件夹。

4.1 首先编译bjam

打开DOS界面切入boost_1_47所有文件夹,执行命令bootstrap.bat,若成功则便可以看到boost_1_47文件夹下多出一个bjam.exe可执行文件。

4.2 利用GCC编译器编译并配置CodeBlocks

在boost_1_47目录下执行命令:

 

bjam install --toolset=gcc --without-graph --without-graph_parallel --without-mpi --without-serialization --without-wave --prefix="D:\boost_1_47_0\GCC" link=static runtime-link=shared runtime-link=static threading=multi debug release

之后经过大约半个小时的等待便可看到boost_1_47文件夹下多出GCC文件夹,GCC下有include(大小约为70M)和lib(150M左右)文件夹。
接下来配置CodeBlocks:
打开C::B新建一工程后,

  1. Settings->Global Variables
    单击Current Set行的New,输入boost.
    base中输入 D:\boost_1_47\GCC 即上面编译时prefix后所跟的目录
    include中输入D:\boost_1_47\GCC\include\boost-1_47 该目录之下为boost目录,写程序时#include <boost/lambda/lambda.hpp>包含的便是D:\boost_1_47\GCC\include\boost-1_47\boostλλ.hpp
    如果你编译的时候不是用install而是stage选项,则这里应该填d:\boost_1_47(即原来boost文件夹目录)
    lib中输入D:\boost_1_47\GCC\lib 即库位置
  2. Project->build options->Search Directories
    Compiler中Add后输入 $(#boost.include)
    Linker中Add后输入 $(#boost.lib)
  3. 此步骤根据程序包含的库不同而可有可无(该文的测试代码不需要此设置)
    Project->build options->Linker settings
    Add添加boost_*-mgwXX-mt-1_47其中*根据你需要包含的库不同而不同,例如#include <boost/filesystem.hpp>,则需要添加"boost_filesystem-mgw45-mt-1_47"和"boost_system-mgw45-mt-1_47"
    (猜想每次都要这样设置感觉很麻烦 不过也没查到什么好办法 Visual Studio应该不用)

4.3 利用MSVC编译器编译并配置Visual Studio 2008

在boost_1_47目录下执行命令:
(其中msvc9.0代表visual studio 2008,如果是vs2010的话应该是msvc10.0,同理vs2005是msvc8.0……)

 

bjam install --toolset=msvc-9.0 --without-graph --without-graph_parallel --without-mpi --without-serialization --without-wave --prefix="D:\boost_1_47_0\VC9" link=static runtime-link=shared runtime-link=static threading=multi debug release

之后便可看到boost_1_47文件夹下多出VC9文件夹,其中有include和lib目录。
配置Visual Studio:
新建一工程后:
工程名上右键->Properties->Configuration Properties

  1. C/C++->General->Additional Include Directorires中添加"D:\boost_1_47\VC9\include\boost-1_47"
  2. 保证Precompiled Headers ->Create/Use Precompiled Header中为Not Using Precompiled Headers
  3. Linker->Additional Library Directories中输入D:\boost_1_47\VC9\lib

4.4 命令行下调用

写makefile:

-I PathToInclude

-L PathToLib

-l NameOfTheLib

例如:

main.exe:main.cpp
g++ -I"D:\boost_1_47\GCC\include\boost-1_47" -L"D:\boost_1_47\GCC\lib" main.cpp -o main.exe

 

 

5 测试代码

 

 1 #include <boost/lambda/lambda.hpp>
2 #include <iostream>
3 #include <iterator>
4 #include <algorithm>
5 using namespace std;
6 int main()
7 {
8
9 using namespace boost::lambda;
10 typedef istream_iterator<int> in;
11 for_each(in(cin), in(), cout << (_1 * 3) << " ");
12 return 0;
13 }

 

Contact Me With Mail Below, Good Luck

Author: visaya fan <visayafan[AT]gmail.com>

Date: 2012-04-07 20:37:07

HTML generated by org-mode 6.33x in emacs 23

 

posted @ 2012-04-07 20:41  visayafan  阅读(3265)  评论(0编辑  收藏  举报