[分享] Boost build 心得

楼主: Caesar08 (Caesar)   2016-02-16 23:36:24
前言:
会写这篇文章是因为网络上的资料零零散散的
所以写一篇文章分享给各位(也给未来的自己)
这篇文章会讲到b2.exe的参数部分
作业系统:windows
编译器:Visual C++ 14.0(Visual Studio 2015)
正文开始:
首先,先去boost的官网下载最新的lib,http://www.boost.org/users/download/
目前(2016/2/16)最新版本是1.60.0(所以底下都用boost_1_60_0),下载好记得解压缩
里面会看到bootstrap.bat,他是一个用来产生b2.exe与bjam.exe的档案
(版本1.47.0以前,只有bjam.exe;版本1.47.0以后,bjam.exe改名为b2.exe)
(现在的bjam.exe是b2.exe的复制版本,两个是一样的,但bjam.exe为了与以前相容而存在)
执行bootstrap.bat
在boost里面,有些library是header-only(只要是class template),有些不是(如:thread)
因此只要使用这些非header-only的档案,就要把那些.cpp档也放入编译
但是每次都这样编译实在很花时间,这些档案都是不会被更改的,那不如就先把他做成.lib(static link library)或.dll(dynamic link library)
让user之后不用编译这些不会动的library
因此,就要开始介绍如何制作这些.lib或.dll
调整编译器参数
你需要先知道编译器版本,像我是Visual C++ 14.0
(如果不知道版本,维基百科有提供协助https://goo.gl/fhIKnR,或在维基百科上搜寻visual c++)
打开boost_1_60_0/project-config.jam(注),里面有一行
using msvc ;
你要改成
using msvc : 14.0 ;
^ ^ ^ 一定要有空格
(如果你电脑只有一个编译器,实际上可以不用填)
如果你的visual studio不是安装在默认路径,那你可能需要指定路径,因此要改成
using msvc : 14.0 : "D:/your/path/to/cl.exe" ;
路径中如果有空格(如:D:/my boost),要用"包起来,并且用/来表示路径(不然就用\\)
(cl.exe是visual c++的编译器)
如果你有特别的参数想要给compiler,例如说你希望它只有在编译c++ code时做optimize,那你就要改成
using msvc : 14.0 : : <cxxflags>"/Od /Ox" ;
^ 因为我用默认路径,所以可以不填任何值
cxxflags是专门针对的C++做处理,如果想对所有语言做处理,可以使用<compileflags>
/Od /Ox是cl.exe的optimize options,别忘记用"包起来
当你的b2.exe的variant使用release时,默认是使用/O2,如果你想用/Ox,你需要先用/O
d把/O2关起来,再使用/Ox
关于更多using的设定可参考http://goo.gl/RYZRWt
而cl.exe参数可参考https://goo.gl/07qCDd,或搜寻visual c++ compiler options
注:不使用user-config.jam是因为它在boost_1_60_0/tools/build/example里面,我懒得移动它
准备b2.exe参数
b2.exe就是实际上产生.lib或.dll的档案,接下来会介绍参数,每一个参数的第一个就是默认值
address-model:32, 64
要产生32或64位元的code
architecture:x86, ia64, sparc, power, mips1, mips2, mips3, mips4, mips32, mips32r2, mips64, parisc, arm, combined, combined-x86-power
因为没有amd64可以选,所以应该大部分人都会选x86
link:shared, static
shared会产出.dll,static会产出.lib
runtime-link:shared, static
shared会用dynamic的run-time library(visual c++的/MD)
static会用static的run-time library(visual c++的/MT)
建议使用shared(default)
target-os:
默认值是你现在使用的os(像我是windows,它就会产出给windows用的library)
如果你想要编译给别的os用的library,你可以给这些参数aix, bsd, cygwin, darwin, freebsd, hpux, iphone, linux, netbsd, openbsd, osf, qnx, qnxnto, sgi, solaris, unix, unixware, windows
threading:single, multi
建议选择multi,因为你不使用thread并不代表你用的library不使用thread
toolset:
像我的编译器是visual c++,所以我会填msvc-14.0(因为我要用14.0的版本)
variant:debug, release, profile
debug会包含debug-symbols与runtime-debugging
release会包含optimization与inlining
profile会包含debug-symbols与optimization与inlining
debug-symbols:on, off
建议交给variant设定就好
runtime-debugging:on, off
建议交给variant设定就好
作者: saxontai (黑暗,点缀孤零零的星)   2016-02-17 00:23:00
推心得整理。不过我自己是认为官方 Getting Started文件已经讲得够清楚了。XD
作者: damody (天亮damody)   2016-02-17 00:48:00
我一直用bjam也没问题啊???bjam --toolset=msvc-14.0 --build-type=complete architecture=x86 address-model=64 stage
作者: b98901056 (岳岳)   2016-02-17 00:56:00
感恩
作者: eye5002003 (下一夜)   2016-02-17 20:49:00
Jamfile里面写很简单,看完都自己写makefile去编译了我是自己写CMake去编译,方便把微调部分记在专案里

Links booklink

Contact Us: admin [ a t ] ucptt.com