Boost.Build 简明教程

目录
1. 介绍
2. 构建过程
3. 基本任务
4. 项目管理
5. 最佳实践
6. 规则参考
7. 特征参考

介绍

编译器和平台无关编译系统
Boost.Build是一个高级编译系统, 它能尽可能容易的管理C++项目集. 其思想是在配置文件中指定编译程序的要素。例如,它不需要告诉Boost.Build如何使用某个编译器。Boost.Build支持多个编译程序,并知道如何使用它们。如果你创建一个配置文件,你只需要告诉Boost.Build在何处寻找源文件,调用哪些可执行文件,Boost.Build使用哪个编译器。然后,Boost.Build将尝试查找编译器并自动生成程序。

Boost.Build支持许多不包含任何编译器特定选项的编译器的配置文件。配置文件完全是编译器独立的。当然,可以设置选项是否应该优化代码。这些选项都是boost.build语言写的。一旦选择编译器去编译程序, Boost.Build会将配置文件中的选项翻译成相应编译器的命令行选项。这样就有可能写一次配置文件,在不同的平台上用不同的编译器构建程序。

Boost.Build只支持C++和C项目. 它是为在不同平台上用不同编译器编译和安装Boost C++库而创造的.

编译过程

Jamfiles和b2解析器
Boost.Build编译器叫b2. 如果你下载和编译了Boost C++库, 你就已经有了b2。b2查找配置文件,读取配置文件并编译相应的项目。它还接受各种命令行选项,例如显示在b2编译项目过程中所有的命令。

项目可以很大,也可以由许多组件组成,其源代码分布在多个目录中。不需要为整个项目创建一个大的配置文件,组件通常会得到他们自己的配置文件。这对于Boost.Build没有什么不同:在一个大的项目中, 有很多的配置文件会被发现和并被b2解释.

对Boost.Build来说, 每个有配置文件的目录是一个项目: 如果目录里有配置文件. 对Boost.Build来说, 子目录里的一个组件与包含很多组件的软件没有区别.

b2配置文件叫Jamfile.jam. 有jam后缀的文件叫Jamfiles. 如果b2发现当前目录下有Jamfile, 它会查找父目录中的Jamfiles. b2逐层递归查找上级目录直到找到Jamroot.jam文件. Jamroot.jam与Jamfile.jam没有区别, 它只是告诉b2不需要再查找下去.

为什么b2在父目录中查找Jamfiles,是因为它可以进行组设置。如果一些组件有一些相同的设置, 他们可以存储在父目录的Jamfile中,这些设置会自动应用到子目录组件中。

注意:
b2必须要查找Jamroot.jam文件, 没有Jamroot.jam文件就会报错. 如果当前目录下有Jamroot.jam文件, 其它Jamfile.jam文件就不需要了. 如果Jamroot.jam在父目录, 当前目录必须有Jamfile.jam文件, 否则, b2不会做任何事情.

Boost.Build 简明教程的更多相关文章

  1. Docker简明教程

    Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...

  2. Teamcity+SVN+VisualStudio在持续集成简明教程

    Teamcity+SVN+VisualStudio持续集成 简明教程 一.写在最前: 1.      各组件版本号例如以下: Teamcity(简称tc)版本号:8.1.4 SVN版本号:Tortoi ...

  3. appium简明教程

    appium简明教程 什么是appium? 下面这段介绍来自于appium的官网. Appium is an open-source tool you can use to automate mobi ...

  4. Tips & Tricks:Apache log4j简明教程(一)

    Apache log4j的官方介绍是“log4j is a reliable, fast and flexible logging framework (APIs) written in Java, ...

  5. 【前端】vue.js环境配置以及实例运行简明教程

    vue.js环境配置以及实例运行简明教程 声明:本文档编写参考如下两篇博客,是对它们的修改与补充,欢迎点击链接查看原文: 原文1:vue.js在windows本地下搭建环境和创建项目 原文2:Vue. ...

  6. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  7. 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)

    小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...

  8. 2013 duilib入门简明教程 -- 部分bug (11)

     一.WindowImplBase的bug     在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题,     1.最大化按钮的样式 ...

  9. 2013 duilib入门简明教程 -- 部分bug 2 (14)

        上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃            如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...

随机推荐

  1. android中ListView点击和里边按钮点击不能同时生效问题解决

    今天遇到一个问题:android中ListView点击和里边button点击不能同时生效问题解决. 原因是: listView 在开始绘制的时候,系统首先调用getCount()函数,根据他的返回值得 ...

  2. CopyU!下一次更新将增加对设备厂商及型号的识别!

    CopyU!下一版本的更新将加入对设备厂商及型号的识别功能,当用户连接设备时,CopyU!将能够辨别出设备的详细型号等,能够在一定程度上帮助用户发现问题设备或仿冒设备. 敬请期待即将到来的新更新!

  3. JavaScript跨域解决办法

    在找到跨域解决办法之前,我们要先弄清楚一些基本概念 什么是跨域? 什么是“同源策略”? 跨文档消息通信 & 跨域请求数据 主域相同而子域不同 不同域名的跨域访问 什么是跨域? 简单地理解就是因 ...

  4. linux 常用查找命令 小技巧

    wc -l `find . -name "*.css"`|tail -n1 指定目录下 在指定后缀文件 查找关键字 find ./ -name "*" -exe ...

  5. 过滤所有的HTML标签

    <script type="text/javascript"> var str = "<p style=color:#FF0000>恩恩,就是就是 ...

  6. 处理 eclipse 导入报错 Invalid project description,问题

    有时候在添加工程时,会出现如图所示的错误信息, ,提示显示将要添加的工程已经存在,但是在工作空间里却找不到,这个时候,要做就是, 在导入的时候选择General->Existing Projec ...

  7. UNIX线程之间的关系

    我们在一个线程中经常会创建另外的新线程,如果主线程退出,会不会影响它所创建的新线程呢?下面就来讨论一下. 1.  主线程等待新线程先结束退出,主线程后退出.正常执行. 示例代码: #include & ...

  8. 调试环境部署续:vs远程调试

    原文http://www.bitscn.com/weixin/464994.html 第一步  IIS的配置 进入iis,点击网址,选择你的网站,在窗口的右边编辑网站中点击绑定,如图所示. 进入网站绑 ...

  9. store procedure 翻页

    store procedure 翻页例子 .turn page CREATE PROCEDURE pageTest --用于翻页的测试 --需要把排序字段放在第一列 ( )=null, --当前页面里 ...

  10. 那天有个小孩跟我说LINQ(一) 转载

    1  LINQ准备(代码下载) 新建项目 linq_Ch1控制台程序,新建一个Entity文件夹     1.1 对象初始化器     在Entity新建一个类Student,代码如下 using S ...