作者Caesar08 (Caesar)
看板C_and_CPP
标题[分享] Boost build 心得
时间Tue Feb 16 23:36:24 2016
前言:
会写这篇文章是因为网路上的资料零零散散的
所以写一篇文章分享给各位(也给未来的自己)
这篇文章会讲到
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设定就好
--build-type:minimal, complete
如果是minimal,在windows上,它只会编译debug跟release两种mode(variant)
但如果是complete,它就会编译你能提供的所有可能,address-model x architecture x ...
建议使用minimal(default)
-jN:平行执行N个指令
N跟你的CPU核心数有关,像我的CPU是8核心,所以N就是8
stage,
install:
stage是装在./stage,install是装在C:/Boost
(前者给你用,後者给所有用这台电脑的人用)
到目前为止,最主要的参数应该都讲完了,接下来就是如何使用
1. 打开command prompt,
如果你有cygwin或MinGW,请不要用他们的bash shell,b2.exe
会以为是Unix系统
2. cd boost_1_60_0
3.
b2.exe 你的指令
(如:
b2.exe -j8
address-model=64
link=static
threading=multi
toolset=msvc-14.0
variant=release
stage,顺序不影响,
architecture、
runtime-link、
--build-type使用default)
(如:
b2.exe -j8
address-model=32,64
link=static
threading=multi
toolset=msvc-14.0
variant=debug,release
--build-type=complete
stage,这边
address-model有32与64,
variant有debug与release,因此到时候就会产出4个.lib,分别是32 x debug、32 x release、64 x debug、64 x release)
4. 等它执行完毕即可
这样就大功告成,之後如果你有visual c++的project要使用boost library
你只要在project > XXX Properties... > Configuration Properties > Linker > General > Additional Library Directories增加boost_1_60_0/stage/lib即可
参考:
http://www.boost.org/doc/libs/1_60_0/doc/html/bbv2/reference.html
http://www.boost.org/doc/libs/1_60_0/more/getting_started/windows.html
https://webptt.com/cn.aspx?n=bbs/Windows/M.1242287062.A.27C.html
https://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.251.50.24
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1455637005.A.3C0.html
1F:推 saxontai: 推心得整理。不过我自己是认为官方 Getting Started 02/17 00:23
2F:→ saxontai: 文件已经讲得够清楚了。XD 02/17 00:23
3F:推 damody: 我一直用bjam也没问题啊??? 02/17 00:48
4F:→ damody: bjam --toolset=msvc-14.0 --build-type=complete archite 02/17 00:50
5F:→ damody: cture=x86 address-model=64 stage 02/17 00:51
6F:→ b98901056: 感恩 02/17 00:56
※ 编辑: Caesar08 (1.161.19.40), 02/17/2016 12:24:09
7F:推 eye5002003: Jamfile里面写很简单,看完都自己写makefile去编译了 02/17 20:49
8F:→ eye5002003: 我是自己写CMake去编译,方便把微调部分记在专案里 02/17 20:52