您的位置:首页 > 其它

VS编译BOOST,bjam参数详解

2015-07-29 13:32 260 查看
VS编译BOOST,bjam参数详解
/article/6956610.html

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\src3.执行 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=<PREFIX> Install architecture independent files here. Default; C:\Boost on Win32 Default; /usr/local on Unix. Linux, etc. --exec-prefix=<EPREFIX> Install architecture dependent files here. Default; <PREFIX> --libdir=<DIR> Install library files here. Default; <EPREFIX>/lib --includedir=<HDRDIR> Install header files here. Default; <PREFIX>/include stage Build and install only compiled library files====== to the stage directory. 在“--stagedir=”指定的目录下生成指定库文件 --stagedir=<STAGEDIR> Install library files here Default; ./stage 【Other Options】:--build-type=<type> Build the specified pre-defined set of variations of the libraries. Note, that which variants get built depends on what each library supports. minimal (default) - Builds the single "release" version of the libraries. This release corresponds to specifying: "release <threading>multi <link>shared <link>static <runtime-link>shared" as the Build variant to build. complete - Attempts to build all possible variations. --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=<layout> Determines whether to choose library names and header locations such that multiple versions of Boost or multiple compilers can be used on the same system. versioned (default) - Names of boost binaries include the Boost version number and the name and version of the compiler. Boost headers are installed in a subdirectory of <HDRDIR> whose name contains the Boost version number. system - Binaries names do not include the Boost version number or the name and version number of the compiler. Boost headers are installed directly into <HDRDIR>. This option is intended for system integrators who are 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-<library> Build and install the specified <library> If this option is used, only libraries specified using this option will be built. --without-<library> 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.0msvc-7.0: VS2003 msvc-8.0: VS2005 msvc-9.0: VS2008 msvc-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.libboost_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.liblibboost_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.liblibboost_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.liblibboost_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.liblibboost_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.libboost_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个, 理论上应该有 2*2*2*2 = 16 种配置ink= static| sharedthreading= single |multivariant=release|debugruntime-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”
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: