转载自:http://rendao.org/blog/264/

                                                    BJAM编译、配置和说明

先了解下bjam

bjam是专门为boost库设计的make工具,boost源码中没有编译完成的bjam,只有源码,需要先编译出bjam,然后才能用bjam编译boost下的众多的库,当然也可以用来编译你自己的工程。但是,boost下各种编译工程支持的编译平台琳琅满目,现在还不一定选bjam呢。

选择bjam+XX作为boost编译平台的理由

Win下C++程序员通常使用VC作为开发工具,在以下几方面做了比较之后我们在决定要不要使用VC编译BOOST

IDE:vc2012的巨型IDE太慢(除非花几大千升级电脑),而CodeBlocks不需要高硬件配置

GUI:MFC代码不能跨平台,而wxWdigets可以

boost支持的编译器:由于STL的支持等等原因boost新版本支持vc2012或者gcc,但不支持vc6

鉴于我的苦逼电脑上无法顺畅的跑vc2010的巨型IDE,加上用wxWidgets代替MFC的趋势,我没有用单纯的vc IDE+vc编译器,而是选择了bjam+mingW或者bjam+vc编译器,这就是引入bjam的原因

注意,谁编译谁调用,vc编译的boost库在vc工程中调用,mingW编译的boost库在mingW工程中调用。

有编译好的的现成bjam.exe,为何还要自己编译?

bjam在boost源码中一起提供,需要编译才能使用,下载boost的时候会提示下载一个编译好的bjam,据说不很推荐,用下载来的bjam编译boost可能出现一些错误,而用自己编译的bjam却顺利完成。有人说是不同版本对目录分隔符的使用不同,不管啦。

bjam编译目录说明

bjam的编译一般用到一个build.bat文件,boost_1_34_1下该bat文件的目录为“boost_1_34_1\tools\jam\src”,在高些的版本下可能为“boost根目录\tools\build\v2\engine\src”,而更高些的版本则干脆变成了“boost根目录\booststrap.bat”,连bat的文件名都变了,但依然是专用来生成bjam的,届时小变通一下同样可以编译bjam。本文以boost_1_34_1版本为例。

bjam编译准备,设置编译器路径(可选步骤)
可选,因为看你想要拿来编译bjam的编译器是否可以被build.bat找到,如果你的vc是默认路径安装的或者自定义安装路径但加入了环境变量PATH,如果你的mingw/gcc是默认安装路径或者加入了环境变量PATH,这一步都不用啦,bat会自动搜索VC/Mingw/gcc的常规安装目录的,可以直接第2步了。但如果你的编译器未纳入环境变量,则要在此bat中指定具体路径
打开build.bat ,其中ProgramFiles变量默认等于“C:\Program Fils”,把它改为编译器的具体目录,注意是目录,不是编译器的文件路径,编译器的名字是在第二步执行build.bat ***时,星号部分指定的

必做:bjam编译
cmd下切换到build.bat所处的目录(本文采用的是boost_1_34_1/tools/jam/src),执行“build.bat msvc”或者“build.bat mingw”或者“build.bat gcc”,编译成功就会在build.bat相同目录下创建bin.ntx86目录并生成bjam.exe,注意:1、键入命令中“.bat”可以省略,2、参数msvc等也可省略(采用默认),3、参数若采用mingw只能是小写,4、编译bjam的地方可以用mingw是因为这个bat支持此参数,实际上内部遇到此参数还是调用的gcc.exe,若是用bjam+mingw编译boost时则没有mingw的编译器选项,只有gcc

必做:bjam加入环境变量

将bjam.exe拷贝到boost_1_34_1/bin,将bin目录完整路径增加到电脑的环境变量-系统变量-PATH,这样的话,cmd下直接输入bjam就可以调用boost_1_34_1/bin/bjam.exe啦

关于bjam命令的参数说明

以如下两行命令为例,解释下参数含义

bjam stage –toolset=msvc-9.0 –stagedir=”C:\SDK\boost\bin” link=staticruntime-link=shared threading=multi debug release

bjam stage –toolset=msvc-9.0 –stagedir=”C:\SDK\boost\bin” link=staticruntime-link=static threading=multi debug release

stage/install: stage表示只生成库文件(dll 和 lib),而 install 还会生成包含头文件的 include 目录(本人选择了 stage 模式,编译完毕后手动将压缩包中的 boost_1_34_1\boost目录拷贝到编译好的库文件所在的根目录下)。

toolset: 顾名思义,是用来指定你是在为哪个编译器编译 boost,比如msvc-6.0或msvc-9.0或gcc,注意,mingw下要用gcc,并没有mingw选项

stagedir/prefix:stage 模式中使用 stagedir,install 模式中使用 prefix,表示编译生成的文件路径。本人指定的是 C:\SDK\boost\bin,你可以根据个人喜好更改这个目录。编译后的库文件所在目录就是 C:\SDK\boost\bin\lib。(前面所说的拷贝 boost 目录,就是将 boost 目录拷贝到 C:\SDK\boost 下)

link:生成动态链接库/静态链接库。动态使用 shared,静态使用 static。因 boost 属于第三方库,所以一般使用静态方式,本人就只编译了静态方式。

runtime-link:动态/静态链接运行时库。同样可以选择 shared 和 static 两种方式,本人编译了这两种。

threading:单/多线程模式。本人编译的多线程方式,即 multi,若需要编译单线程模式,则指定为 single 即可。

debug/release:编译 debug/release 版本。

BOOST环境配置

vc6的boost环境配置

首先,从官网下载boost的压缩包,解压,以版本1-34-1为例,解压之后后有个boost_1_34_1目录,把改目录拷贝到某处,比如E:\,由于boost库应用广泛,所以当作sdk一样安装到vc6中

然后,打开VC6,工具-选项-目录-Include Files,加入一行“E:\boost_1_34_1”,工具-选项-目录-Library Files,加入一行“E:\boost_1_34_1\bin”,注意,默认是没有bin这个目录的,但为了把编译得到的boost下的所有lib、dll文件集中管理,所以都放到这里吧

OK

CodeBlocks的boost环境配置

待续

bjam+vc(编译器)/ mingW编译BOOST

 

关于boost版本

本文以boost_1_34_1版本为例,编译更高版本时,用到的bjam命令是一样的

 

确认编译环境

bjam环境:请再次确认bjam.exe已编译并加入环境变量的PATH中,验证方法是进入cmd后直接键入bjam回车,如果加入成功会有bjam的提示文字。

msvc编译器:vc++正确安装时会自动加入环境变量的,不同的msvc版本,在bjam命令上只时个vc版本号的区别而已

mingw/gcc编译器:进入cmd窗口,键入gcc –v,若gcc正确加入环境变量的PATH,应该会提示版本信息,否则请参考CodeBlocks+mingW的安装和环境配置过程

编译单一库的方法
以thread为例,thread下没有提供vc6直接编译的dws工程,所以采用用bjam+vc6编译器或者bjam+mingw。
cmd下切换目录至boost_1_34_1/,用VC6就键入“bjam –build-type=complete toolset=msvc-6.0 stage –with-thread”,用MingW就键入“bjam –build-type=complete toolset=gcc stage –with-thread”,编译成功,注意,键入命令写法不固定,参数顺序可以调整,boost_1_34_1/bin.v2/libs/thread/build/msvc-6.0或者gcc-mingw-4.4.1目录下会生出debug和release的静态库动态库。如果要编译其他的库,把上面cmd命令中的thread替换即可,注意,用MingW时toolset指定为gcc而不是mingw,否则无法编译

编译整个boost的方法
cmd下,目录切换到boost_1_34_1,用vc6就键入“bjam –build-type=complete toolset=msvc-6.0 stage”,用MingW就键入“bjam –build-type=complete toolset=gcc stage”

编译出来的文件放到哪里?

正确编译之后,在boost_1_34_1目录下新建一个bin目录,把所有编译生成的lib、dll文件(注意,是所有的,不要因为lib文件比dll文件要多就只拷贝成对出现的lib、dll)拷贝到bin目录

编译出来的文件名的含义

以date_time库为例,编译共生成16个库文件:
libboost_date_time-mgw44-1_46.a
libboost_date_time-mgw44-1_46.dll
libboost_date_time-mgw44-1_46.dll.a
libboost_date_time-mgw44-d-1_46.a
libboost_date_time-mgw44-d-1_46.dll
libboost_date_time-mgw44-d-1_46.dll.a
libboost_date_time-mgw44-mt-1_46.a
libboost_date_time-mgw44-mt-1_46.dll
libboost_date_time-mgw44-mt-1_46.dll.a
libboost_date_time-mgw44-mt-d-1_46.a
libboost_date_time-mgw44-mt-d-1_46.dll
libboost_date_time-mgw44-mt-d-1_46.dll.a
libboost_date_time-mgw44-mt-s-1_46.a
libboost_date_time-mgw44-mt-sd-1_46.a
libboost_date_time-mgw44-s-1_46.a
libboost_date_time-mgw44-sd-1_46.a
如上,mgw44代表编译器Mingw4.4版本:
mt: threading=multi
s: runtime-link=static
d: variant=debug
.dll: link=shared
.dll.a: 对应DLL的导入库文件

补充个比较笨的编译单个库的方法,不推荐,每次要找具体模块的目录这样不累吗

以thread为例
cmd下切换目录至boost_1_34_1/libs/thread/build,然后执行bjam编译命令,有人说是“bjam  bjam –toolset=msvc-6.0”,但会提示出错“notice: could not find main target  bjam”“don’t know how to make <e>bjam”等等,因为多些了一个bjam,实际上采用如下命令就可以啦,“bjam –toolset=msvc-6.0”,编译成功后就会在boost_1_34_1/bin.v2/libs/thread/build/msvc-6.0/debug/threading-multi下面生成boost_thread-vc6-mt-gd-1_34_1.dll和boost_thread-vc6-mt-gd-1_34_1.lib库,可以给VC6.0使用。

补充个纯VC6(IDE+编译器)编译boost::regex的方法,不推荐,不是所有的库都可以用此方法

VC6下只可使用支持VC6的最后一个版本,如果不想升级编译器就选用1.34.1版本吧。打开boost根目录\libs\regex\build,找到文件vc6.mak,用VC6打开这个文件,填写个dsp工程名称,编译,等待几分钟,OK啦,找到lib和dll文件了吧。

如果编译时报错“fatal error U1050: Variable MSVCDIR not set.”,那就在我的电脑的环境变量-系统变量中添加名为MSVCDIR的变量,值等于C:\Program Files\Microsoft Visual Studio\VC98

正确编译regex库之后,在类似boost_1_34_1\libs\regex\build\vc6这样的目录下可以得到lib和dll文件,把所有的lib、dll文件拷贝出来,注意,是所有的,不要因为lib文件比dll文件要多就只拷贝成对出现的lib、dll,拷贝之后在boost_1_34_1目录下新建一个bin目录,把刚拷贝的文件粘贴到这里

Related posts:

  1. wxWidgets源码的编译(wxWidgets-2.8.12)
  2. C++内存问题大集合
  3. 电子弗洛伊德计划(EFP)

boost配置(VC/CodeBlocks)与编译(bjam+msvc/mingW)相关推荐

  1. linux stlport 编译,VC++2010下编译STLport,Boost

    VC++2010下编译STLport,Boost 最近在想向Boost转移,努力掌握Boost代码的过程中, STLport版本:5.2.1 Boost版本:1.4.6.1 (1.4.7.0也OK) ...

  2. C++ Boost库:windows下编译Boost库

    文章目录 1. 需要编译的boost库 2. 编译步骤 3. 库命名规则 4. VS配置库目录 C++ Boost库:简介和第一个示例程序 C++ Boost库:数值转换 lexical_cast C ...

  3. Kinectfusion开源实现_配置Kinfu环境_Cmake编译PCL点云库_Kinect3D重建

    Kinectfusion开源实现-配置Kinfu环境-Cmake编译PCL点云库 注: 1.此教程在win10_x64.VS2010_x86环境下,配置运行Kinfu.编译PCL点云库成功,其他环境也 ...

  4. Boost学习之Boost下载、安装、编译

    写在前面 近期项目,涉及到Boost库的编译和更迭,编译以及编译参数等如何设置,一时间让我很头疼,因此决定趁周末,总结一下编译等流程, 方便日后复习. 文章目录 1.Boost下载 2.安装 3.编译 ...

  5. Clion配置Qt+MSVC/MinGW环境

    Clion配置Qt+MSVC/MinGW环境 (正在持续更新) Clion配置Qt+MSVC/MinGW环境 1. QT中的编译器 2. 两种编译器的优势劣势 3. Clion + Qt - MSVC ...

  6. 2021-02-04 Halcon初学者知识【12】 如何配置VC++和Halcon环境

    前言 配置在VC++上配置Halcon是个非常简单的过程:但是恰恰许多人对VC++项目配置很是头痛,至使拖延了学习进度.本篇将简单告诉你如何做的有条理,使这种配置不再是难事. 1 检查系统,做到心中有 ...

  7. Editplus配置VC++(1) 及相关注意事项

    下篇文章:Editplus配置VC++(2) 与/d1reportSingleClassLayout 原本用的是VC++2010 现在换成了Visual Studio 2013,editplus相关配 ...

  8. linux如何编译boost指定库,linux下编译安装boost库

    linux下编译安装boost库 先看一下系统环境 Linux o-pc 3.19.0-22-generic #22-Ubuntu SMP Tue Jun 16 17:15:15 UTC 2015 x ...

  9. 配置Abaqus2021 + VS2019 + IVF2020编译环境

    配置Abaqus2021 + VS2019 + IVF2020编译环境 背景介绍 研三需要对Abaqus进行UMAT二次开发,虽然不喜欢Fortran,但是还是需要进行安装. 本文介绍的是我第二次安装 ...

最新文章

  1. 白给的性能不要?cvpr2021-Diverse branch block
  2. 干货丨八大基础概念带你入门机器学习!
  3. malloc和new出来的地址都是虚拟地址 你就说内存管理单元怎么可能让你直接操作硬件内存地址!...
  4. Spring MVC-09循序渐进之文件上传(基于Servlet3.0+内置功能)
  5. 为什么selection.find在word vba中不返回所有结果?_工作表查询中,内连接Inner join的讲解...
  6. 智能情绪分析技术_情绪转变令市场再次修正 Justforex:欧元、英镑、日元、黄金技术分析...
  7. 如何使用Kubernetes的configmap通过环境变量注入到pod里
  8. 前端学习(2870):Vue路由权限『前后端全解析』1
  9. no typehandler found for property XXXX 解决
  10. EMC创建出《星际旅行》全息甲板,并利用其模拟数据中心
  11. 文档类型HTML和XHTML,关于xhtml:html中有哪些不同的doctypes,它们是什么意思?
  12. 不到三千买iPhone12 网友:抢到算我输
  13. 更小的模型,迈向更快更环保的NLP
  14. 新网域名服务故障的N种可能
  15. UITapGestureRecognizer 的用法
  16. java同步代码块作用_Java之同步代码块
  17. 速达3000pro saas数据库修复
  18. HR告诉你,怎么回答“为什么从上家公司离职?
  19. 解密百度前端技术体系
  20. 史上最全各种简历模板,自荐信模板和面试技巧

热门文章

  1. 洗脑有术:如何防止被洗脑?
  2. LRTimelapse 5 for Mac(专业延时摄影软件)
  3. root清理手机预装软件,安卓全机型卸载预装软件免root
  4. 多多情报通:拼多多怎么样快速引流?
  5. 读史心得——吹嘘和伪造的西方历史
  6. tshark 网络抓包监控工具
  7. 树莓派linux iso镜像下载,树莓派入门(一) - 下载安装系统镜像,Raspbian和Centos-Go语言中文社区...
  8. iperf java_网络性能测试工具Iperf/Jperf解读
  9. 使用For循环实现9x9乘法表
  10. C#学习 仿windows计算器 完结