VS编译BOOST,bjam参数详解

news/2024/10/30 9:34:15/

vs2008编译boost

【一、Boost库的介绍】

Boost库是一个经过千锤百炼、可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,其成员已近2000人。 Boost库为我们带来了最新、最酷、最实用的技术,是不折不扣的“准”标准库。

Boost库中比较有名的几个库:

(1)Regex,正则表达式库;

(2)Spirit,LL parser framework,用C++代码直接表达EBNF;

(3)Graph,图组件和算法;

(4)Lambda,在调用的地方定义短小匿名的函数对象,很实用的functional功能;

(5)concept check,检查泛型编程中的concept;

(6)Mpl,用模板实现的元编程框架;

(7)Thread,可移植的C++多线程库;

(8)Python,把C++类和函数映射到Python之中;

(9)Pool,内存池管理;

(10)smart_ptr,智能指针。

【二、Boost库的编译】

【Setp1 准备工作】:

(1)Boost 下载可以到官方网站下载:

http://www.boost.org/

(2)安装VS2008 IDE

【Setp2 编译Boost】

1.打开Visual Studio 2008 命令提示窗口

2.进入D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\boost_1_44_0\tools\jam\src

3.执行 build.bat 会在D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\boost_1_44_0

\tools\jam\src\bin.ntx86 生成 bjam.exe文件.

4.Copy bjam.exe 文件到 D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\boost_1_44_0 下

6.进入D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\boost_1_44_0 目录

7.执行bjam.exe 编译命令,如下:

(1)编译所有boost动态库 (release|debug),包括头文件和库文件

bjam --toolset=msvc-9.0 --prefix=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output --without-python --build-type=complete  link=shared  threading=multi install

(2)只编译 release 版本 regex 动态库,包括头文件和库文件

bjam --toolset=msvc-9.0 --prefix=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output1 --with-regex link=shared  threading=multi variant=release runtime-link=shared  install

(3)只编译 release 版本 regex 动态库,包括库文件

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output2--with-regex link=shared  threading=multi variant=release runtime-link=shared  stage

【注意】: Boost 源代码所在路径最好全英文,不要有空格、特殊字符、中文等

编译要花上30分钟左右(根据PC性能所定), 会在指定生成目录:

D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output下生成对应库文件和头文件。

8.设置开发环境

打开VS2008 创建工程, 配置工程属性

设置包含文件目录F:\Develop\BoostlibAndDll\include\boost-1_37\boost

设置引用文件目录:F:\Develop\BoostlibAndDll\lib

完成后,可以使用。

【三、介绍Bjam使用】

Usage:

Bjam [options] [properties] [install|stage]

install Install headers and compiled library files to the

======= configured locations (below).

                  在“--prefix=”指定的目录下生成所有头文件(boost源代码下boost文件夹下所有文件)和指定库文件

–prefix= Install architecture independent files here.

                 Default; C:\Boost on Win32Default; /usr/local on Unix. Linux, etc.

–exec-prefix= Install architecture dependent files here.

                 Default; <PREFIX>

–libdir=

Install library files here.

                 Default; <EPREFIX>/lib

–includedir= Install header files here.

                  Default; <PREFIX>/include

stage Build and install only compiled library files

====== to the stage directory.

                      在“--stagedir=”指定的目录下生成指定库文件

–stagedir= Install library files here

                  Default; ./stage

【Other Options】:

–build-type= Build the specified pre-defined set of variations

                 of the libraries. Note, that which variants getbuilt depends on what each library supports.minimal (default) - Builds the single"release" version of the libraries. Thisrelease corresponds to specifying:"release  <threading>multi  <link>shared<link>static  <runtime-link>shared" as theBuild variant to build.complete - Attempts to build all possiblevariations.

–build-dir=DIR Build in this location instead of building

                 within the distribution tree. Recommended!

–show-libraries Displays the list of Boost libraries that require

                 build and installation steps, then exit.

–layout= Determines whether to choose library names

                 and header locations such that multipleversions of Boost or multiple compilers canbe used on the same system.versioned (default) - Names of boostbinaries include the Boost versionnumber and the name and version of thecompiler. Boost headers are installedin a subdirectory of <HDRDIR> whosename contains the Boost version number.system - Binaries names do not includethe Boost version number or the nameand version number of the compiler.Boost headers are installed directlyinto <HDRDIR>. This option isintended for system integrators whoare building distribution packages.

–buildid=ID Adds the specified ID to the name of built

                    libraries. The default is to not add anything.

–help This message.

–with- Build and install the specified

                        If this option is used, only librariesspecified using this option will be built.

–without- Do not build, stage, or install the specified

                         <library>. By default, all libraries are built.

【Properties】:

toolset=toolset Indicates the toolset to build with.

                                                    msvc-6.0 :  VC6.0

msvc-7.0: VS2003

                                                    msvc-8.0:  VS2005msvc-9.0:  VS2008msvc-10.0:  VS2010

variant=debug|release Select the build variant

link=static|shared Whether to build static or shared libraries

threading=single|multi Whether to build single or multithreaded binaries

runtime-link=static|shared Whether to link to static or shared C and C++ runtime.

                     决定是静态还是动态链接C/C++标准库

Bjam 选项、参数说明

--build-dir=<builddir>编译的临时文件会放在builddir里(编译完就可以把它删除了)--stagedir=<stagedir>存放编译后库文件的路径,默认是stage--build-type=complete编译所有版本,不然只会编译一小部分版本(相当于:
variant=release,threading=multi;
link=shared|static;runtime-link=shared)variant=debug|release决定编译什么版本(Debug or Release)link=static|shared决定使用静态库还是动态库threading=single|multi决定使用单线程还是多线程库runtime-link=static|shared决定是静态还是动态链接C/C++标准库--with-<library>只编译指定的库,如输入--with-regex就只编译regex库了--show-libraries显示需要编译的库名称

【四、Bjam 生成文件的分析】

(1)生成 Release 版本,多线程,动态链接C++标准库 的regex 动态库

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output2--with-regex   link=shared  threading=multi  variant=release  runtime-link=shared  stage

– 输出: boost_regex-vc90-mt.lib

boost_regex-vc90-mt-1_44.lib

            boost_regex-vc90-mt-1_44.dll

(2)生成 Release 版本,多线程,静态链接C++标准库 的regex 动态库

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output2--with-regex   link=shared  threading=multi  variant=release  runtime-link= static  stage

– 输出: 没有这种配置

(3)生成 Release 版本,多线程,动态链接C++标准库 的regex静态库

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output2--with-regex   link= static  threading=multi  variant=release  runtime-link=shared  stage

– 输出: libboost_regex-vc90-mt-s.lib

libboost_regex-vc90-mt-1_44.lib

(4)生成 Release 版本,多线程,静态链接C++标准库 的regex 静态库

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output3--with-regex  link=static  threading=multi  variant=release  runtime-link=static  stage

– 输出:libboost_regex-vc90-mt-s.lib

libboost_regex-vc90-mt-s-1_44.lib


(1)生成 Debug 版本,多线程,动态链接C++标准库 的regex 静态库

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output4--with-regex  link=static  threading=multi  variant=debug runtime-link=shared  stage

– 输出: libboost_regex-vc90-mt-gd.lib

libboost_regex-vc90-mt-gd-1_44.lib

(2)生成 Debug 版本,多线程,静态链接C++标准库 的regex 静态库

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output5--with-regex   link=static  threading=multi  variant=debug  runtime-link=static  stage

– 输出: libboost_regex-vc90-mt-sgd.lib

libboost_regex-vc90-mt-sgd-1_44.lib

(3)生成 Debug 版本,多线程,动态链接C++标准库 的regex 动态库

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output5--with-regex   link=shared  threading=multi  variant=debug  runtime-link=shared  stage
  • 输出: boost_regex-vc90-mt-gd.lib

boost_regex-vc90-mt-gd-1_44.lib

     boost_regex-vc90-mt-gd-1_44.dll

(4)生成 Debug 版本,多线程,静态链接C++标准库 的regex动态库

bjam --toolset=msvc-9.0--stagedir=D:\05_Computer\04_3rdPatry\02Boost\boost_1_44_0\output5--with-regex   link=shared  threading=multi  variant=debug  runtime-link=static  stage

– 输出:没有这种配置

【总结】:

(1) 编译成功后,Bjam 都会给你生成一对一样的导入库文件或者静态库文件(如下),

唯一不同的是两个文件名称一个在后面加上了boost版本信息, 为了让用户知道使用的boost的版本信息。

boost_regex-vc90-xxxxx.lib

boost_regex-vc90-xxxxx-1_44.lib

(2) Bjam编译选项 有4个, 理论上应该有 222*2 = 16 种配置

ink= static| shared

threading= single |multi

variant=release|debug

runtime-link= static |shared

实际使用的多为多线程, 所以 threading= multi, 这样剩下的3个选项组成的编译配置就是上面所罗列的, 其中静态链接C++标准库的boost动态库这种配置也不存在, 所以就只有4种情况。

(3)

      link= static : 静态库。 生成的库文件名称以 “lib”开头

link= shared : 动态库。生成的库文件名称无“lib”开头

threading= mult : 支持多线程。 生成的库文件名称中包含 “-mt”

variant=release 生成的库文件名称不包含 “-gd”

variant= debug 生成的库文件名称包含 “-gd”

runtime-link= static 生成的库文件名称包含 “-s”

runtime-link= shared 生成的库文件名称不包含 “-s”


http://www.ppmy.cn/news/122279.html

相关文章

c语言编程练习题:7-157 计算指数

#include <stdio.h> int main(){int n;if (scanf("%d",&n)!EOF){int sum1;for (int i0;i<n;i){sum*2;}printf("2^%d %d",n,sum);}else{printf("input wrong");}return 0; }

VB是如何发明的。Ruby + EB = Visual Basic

在我认真研究内部世界和 VB6 设备之前&#xff0c;我和许多人一样&#xff0c;脑子里可能有以下想法&#xff1a;VB 是主要产品&#xff0c;而 VBA 是副产品&#xff0c;是削减功能方面的主要产品&#xff0c;并附加到 Excel、Word 等 Office 应用程序。但经常发生的是&#xf…

儿童节小游戏——HTML+JS实现贪吃蛇

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

python粘包问题

1. 什么是粘包? 首先,只有TCP有粘包现象,UDP没有粘包。 粘包问题主要是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。客户端发送两包数据,我们认为服务端是一包数据一包数据的接收,实际服务端可能一次都收到了全部数据,并认为这是一包数据…

Mobx和Mobx-react:集中式状态管理

一、Mobx (1) Mobx是一个功能强大&#xff0c;上手非常容易的状态管理工具。 (2) Mobx背后的哲学很简单: 任何源自应用状态的东西都应该自动地获得。只获取与自己相关的数据&#xff0c;不获取无关数据&#xff08;redux则相反&#xff09; (3) Mobx利用getter和setter来收集组…

投影仪幕布的开关在哪里_不可错过的智能投影仪幕布处理方法

原标题&#xff1a;不可错过的智能投影仪幕布处理方法 对于观看智能投影来说&#xff0c;幕布非常重要&#xff0c;直接影响我们的观影感受。因此&#xff0c;针对幕布的检验最重要的部分是幕面&#xff0c;幕面的好坏将直接影响到画面所呈现的影像效果&#xff0c;针对遇到的关…

幕布图像大小与投影仪亮度关系对应表,--怎样选投影机和银幕不用愁了

很多有选定好了幕布大小例如100寸,120寸 ,150寸,甚至200寸,要选多大亮度的投影仪比较合适,有没有相应标准?一直没有低,其实这个选择和很多因素都关,像幕布的增益,需要不需要播放3D等,下我图是按国际通用标准 2D采用14FL下要求下幕布大小与投影机对应亮度关系,3D模式下,4.5FL,与…