快乐的天空

时间来得快,去得也快

 

bjam 编译boost

 

link=static variant=debug,release threading=multi runtime-link=static --layout=versioned --toolset=msvc-9.0  --build-type=complete  stage
--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  显示需要编译的库名称

boost库的命名约定:
[lib]<boost模块名>-<toolset编译器>[-mt][-sgdyp]<-boost版本>.<扩展名>
    [lib]:所有模块均采用lib为前缀,除了windows+msvc环境。在windows+msvc环境下,只有静态库(.lib)才有lib前缀,动态库(.dll)没有lib前缀。windows+mingw环境也使用lib前缀。
    <boost模块名>:所有模块均以boost_开头,比如boost_date_time, boost_python等等
    <toolset编译器>:比如mgw45, vc90
    [-mt]:多线程支持,不指定则默认为仅支持单线程
    [-sgdyp]:ABI的详细情况
        s 静态链接到C++标准库和运行库
        g 使用debug版的标准库和运行库
        d 编译debug版
        y python相关的debug
        p 使用STLPort作为C++标准库而不是编译器默认提供的
    <-boost版本>:比如-1_45
    <扩展名>:
        windows+mingw:dll(动态库),dll.a(动态库的导入库)
        windows+msvc:dll(动态库),lib(无lib前缀的是动态库的导入库),lib(有lib前缀的是静态库)
        unix/linux:a(静态库),so(动态库)
        使用boost
    windows+msvc编译出来的boost库默认会打开auto-link功能,即在包含boost头文件的时候自动寻找并链接依赖库。这实际上是通过msvc特有的预处理指令#pragma comment(lib, "xxx.lib")来实现的,默认的实现为链接静态库。
        如果想要链接动态库,则需要使用预定义宏 -DBOOST_ALL_DYN_LINK
        如果想要完全手动控制链接方式,则需要使用预定义宏 -DBOOST_ALL_NO_LIB。
    windows+mingw编译出来的boost库不支持auto-link,因为gcc没有类似msvc的#pragma comment预处理指令,所以必须手动控制链接方式。
    asio:依赖Boost.system模块,并且如果用到特定功能还可能依赖Boost.regex, Boost.openssl, Boost.thread, Boost.date_time, Boost.serialization等等,可以使用预定义宏 -DBOOST_DATE_TIME_NO_LIB 以及 -DBOOST_REGEX_NO_LIB 关闭相应模块的自动链接。windows下asio最终使用的是windows系统的socket库:ws2_32.lib,Mswsock.lib.同理,msvc可以通过auto-link自动完成链接,mingw需要手动设置。
    使用msvc编译真是有些玄妙:
使用预定义宏BOOST_ALL_DYN_LINK,动态链接:则编译时需要动态链接库导入库system,date_time,regex,执行时需要system,date_time。
使用预定义宏BOOST_ALL_NO_LIB,动态链接:则编译时需要动态链接库导入库system,执行时也只需要system。
使用预定义宏BOOST_ALL_NO_LIB,静态链接:则编译时需要静态库system,执行时不需要system。
 
使用mingw编译,一切正常:
注意上述几个预定义宏只对msvc有用而对mingw是不起作用的
动态链接:则编译时需要动态链接库导入库system,执行时也只需要system
静态链接:则编译时需要静态库system,执行时不需要system
当然ws2_32, Mswsock总是要指定链接的。
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.0
msvc-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++标准库


compile gce dependence lib

b2 --toolset=msvc-14.0  link=static variant=debug,release threading=multi runtime-link=static  asmflags=\safeseh --stagedir=../.. --with-thread --with-atomic  --with-coroutine --with-context --with-system --with-regex --with-date_time --with-chrono
[context] msvc /SAFESEH

http://comments.gmane.org/gmane.comp.lib.boost.devel/244402

posted on 2015-08-16 23:26 探路者 阅读(1169) 评论(2)  编辑 收藏 引用 所属分类: 开发笔记

评论

# re: bjam 编译boost 2015-08-17 09:14 cpper

boost用处不是很大,刚毕业的前几年蛮喜欢这个的  回复  更多评论   

# re: bjam 编译boost[未登录] 2015-08-18 16:54 JASON

重度C++使用者啊
  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

新闻档案

Android

Compiler Course

VIM

编译技术集合

测试

高性能计算

个人博客

框架/组件/库

搜索

最新评论

阅读排行榜

评论排行榜