C++有一个强大的Boost,里面有好多功能是C++标准库所不支持的。看着Boost中那些强大的功能模板怎能不动心呢!下面我们就来看看如何在VS2010下使用Boost库。
系统:windows7
开发环境:Visual Studio 10
boost版本:boost_1_55_0
(1)boost下载
首先从boost官方主页BOOST官方下载网址下载最新版boost安装包,下载完毕后将其解压在[D:\ProgramFiles\MicrosoftVisualStudio10.0\boost_1_55_0](此处是我的解压目录)。
(2)运行bootstrap.bat生成bjam.exe可执行文件
用VS2010的命令行来实现,后期也是使用VS2010的命令行来实现boost库的编译。步骤为:
点击开始—>所有程序--> Microsoft Visual Studio 2010-->VisualStudio tools--> Visual Studio 2010 命令提示。
打开VisualStudio 2010 命令提示 后进入boost的解压目录(D:\ProgramFiles\MicrosoftVisualStudio10.0\boost_1_55_0):
运行booststrap.bat应用程序: 输入 bootstrap.bat [回车 ] 即可运行。
运行完毕后就可以在bootstrap.bat当期目录看到生成的b2.exe及bjam.exe。运行完毕后有相应的提示,可根据提示操作。
(3)修改user-config.jam文件
user-config.jam文件的位置在boost解压目录boost_1_55_0\tools\build\v2目录下[我的解压目录位置为D:\ProgramFiles\MicrosoftVisualStudio10.0\boost_1_55_0\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 ; |
<compileflags>间用空格隔开,以上的‘:‘及‘::’的格式都是正确的。如果开发环境为VS2008则msvc项应为msvc:9.0。保存后关闭文件。
(4)用bjam.exe编译生成库文件
在Visual Studio 2010 命令提示 命令窗口中执行以下命令[可先命令bjam–show-libraries查看有哪些库是必须编译才能使用的 ]:
bjam stage --toolset=msvc-10.0 --without-python --without-mpi --without-wave --without-graph --without-math --without-serialization --stagedir="D:\boost_1_55_0\boost_1_55_0\bin\vc10" link=static runtime-link=shared threading=multi debug release |
stagedir="D:\boost_1_55_0\boost_1_55_0\bin\vc10"指定编译后的库文件存放目录
如果开发环境是vs2008则对应的--toolset参数值为msvc-9.0。运行此命令后就可以看见在指定目录F:\boost_1_54_0\boost_1_54_0下生成bin,bin.v2文件,然后随着编译,这两个文件里面的东西也越来越多。
如果是全部编译,将编译的库放在指定的目录,则可以这样子书写bjam命令:
bjam stage --toolset=msvc-10.0 --build-type=complete --stagedir="D:\boost_1_55_0\boost_1_55_0\bin\vc10" link=static runtime-link=shared threading=multi debug release
在XP系统下,用VS2008编译完全后还有环境配置的提示。
bjam命令和各参数间及参数与参数间都以空格隔开。debug release表示调试版和发布版皆被生成。
bjam使用的形式为:
bjam --参数1-模式1 --参数2-模式2参数3=模式3 … debug
release
参数前要加”--”,参数对应项如“—without-serialization” –without与serialization之间要加”-”,其它的参数需要设置成对应的模式用”=”。
bjam.exe部分参数解释如下:
stage/install:stage指定boost C++库安装在名为stage的子目录下,可又--stagedir指定安装路径;install在系统范围内安装(windows下安装目录为C:\Boost,而在linux中则是/usr/local),目标目录也可以由--prefix指出。 stage表示只生成库(dll和lib),install还会生成包含头文件的include目录。【未经验证】 --toolset:指定C++的编译器[ VS2008对应--toolset=msvc-9.0,vs2010对应--toolset=msvc-10.0 --build-type:创建何种方式的库。缺省情况下,该选项设为minimal,即只创建发布版。对于那些想用Visual Studio 或GCC 构建他们项目的调试版的开发者来说,可能是一个问题。因为这些编译器会自动尝试链接调试版的Boost C++ 库,这样就会给出一个错误信息。在这种情况下,应将--build-type link:创建动态[ link=shared ]还是静态[link=static]的库. runtime-link:指定C++运行时库是静态[ runtime-link=static ]链接还是动态[ runtime-link=shared ]链接 threading:单[ threading=single ]/多线程[ threading=multi ]编译。 without/with:选择不编译/编译哪些库。 |
在D:\Program Files\Microsoft Visual Studio 10.0\boost_1_55_0根目录下Jamroot文件,是关于bjam的详细使用说明。
其中没有安装的库比较多,如果我今后要用到这些没有安装的这些库,则重新进入VS2010的命令行安装即可.
这个过程执行时间比较长[不安装这么多的库还好,要是都安装的话时间就真的比较长了,感觉我的电脑都不止网上说的一个小时的,所以选择以后会用到什么库再安装的方式来使用bjam.exe 。不过配置较好的台式机花的时间就比较少了 ],命令窗口会出现大量的字符串。这个场景让我想起了大二开始搞的linux字符界面呀,在那个界面之下操作的的场景与此景相似,而且我觉得在命令行下的命令使用格式都差不多的。可以专门查一下bjam的用法。
(5)VS2010 boost库配置
为boost设置一个环境变量BOOST,变量值:D:\boost_1_55_0\boost_1_55_0。然后在VS2010的项目中对应目录进行以下设置。
右键项目-->属性-->VC++目录;
1.将boost库文件目录(即D:\boost_1_55_0\boost_1_55_0\bin\vc10)加入library目录(或者放入D:\Program Files\Microsoft Visual Studio 10.0\VC\lib目录下)。
2.将D:\ProgramFiles\MicrosoftVisualStudio10.0\boost_1_55_0\boost目录(即解压的boost1_55_0包含头文件的目录)放入D:\Program
Files\Microsoft Visual Studio 10.0\VC\include目录下)。
如果是VS2008则配置步骤为:
打开VS2008项目,工具-->选项-->项目和解决方案-->VC++ 目录,然后在右上角(显示以下内容的目录)选择包含文件及库文件。
(6)测试
#include <boost/thread/thread.hpp> #include <iostream> void hello() { for(int i=0;i<30;i++){ std::cout<<"Hello world, I'm a thread!"<<std::endl; } } void hello2(){ for(int i=0;i<30;i++){ std::cout<<"Hello world2222, I'm a thread!"<<std::endl; } } int main() { boost::thread thrd(&hello); boost::thread thrd2(&hello2); thrd.join(); thrd2.join(); return 0; }