Boost.Build 简明教程
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 简明教程的更多相关文章
- Docker简明教程
Docker简明教程 [编者的话]使用Docker来写代码更高效并能有效提升自己的技能.Docker能打包你的开发环境,消除包的依赖冲突,并通过集装箱式的应用来减少开发时间和学习时间. Docker作 ...
- Teamcity+SVN+VisualStudio在持续集成简明教程
Teamcity+SVN+VisualStudio持续集成 简明教程 一.写在最前: 1. 各组件版本号例如以下: Teamcity(简称tc)版本号:8.1.4 SVN版本号:Tortoi ...
- appium简明教程
appium简明教程 什么是appium? 下面这段介绍来自于appium的官网. Appium is an open-source tool you can use to automate mobi ...
- Tips & Tricks:Apache log4j简明教程(一)
Apache log4j的官方介绍是“log4j is a reliable, fast and flexible logging framework (APIs) written in Java, ...
- 【前端】vue.js环境配置以及实例运行简明教程
vue.js环境配置以及实例运行简明教程 声明:本文档编写参考如下两篇博客,是对它们的修改与补充,欢迎点击链接查看原文: 原文1:vue.js在windows本地下搭建环境和创建项目 原文2:Vue. ...
- Node.js学习笔记(3):NPM简明教程
Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...
- 2013 duilib入门简明教程 -- 第一个程序 Hello World(3)
小伙伴们有点迫不及待了么,来看一看Hello World吧: 新建一个空的win32项目,新建一个main.cpp文件,将以下代码复制进去: #include <windows.h> #i ...
- 2013 duilib入门简明教程 -- 部分bug (11)
一.WindowImplBase的bug 在第8个教程[2013 duilib入门简明教程 -- 完整的自绘标题栏(8)]中,可以发现窗口最大化之后有两个问题, 1.最大化按钮的样式 ...
- 2013 duilib入门简明教程 -- 部分bug 2 (14)
上一个教程中提到了ActiveX的Bug,即如果主窗口直接用变量生成,则关闭窗口时会产生崩溃 如果用new的方式生成,则不会崩溃,所以给出一个临时的快速解决方案,即主窗口 ...
随机推荐
- ThinkPHP函数详解:M方法
M方法用于实例化一个基础模型类,和D方法的区别在于:1.不需要自定义模型类,减少IO加载,性能较好:2.实例化后只能调用基础模型类(默认是Model类)中的方法:3.可以在实例化的时候指定表前缀.数据 ...
- [React] React Fundamentals: Using Refs to Access Components
When you are using React components you need to be able to access specific references to individual ...
- 进程控制之wait3和wait4函数
大多数UNIX系统实现提供了另外两个函数wait3和wait4.它们提供的功能比POSIX.1函数wait.waitpid和waitid所提供的功能要多一个,这与附加参数rusage有关.该参数要求内 ...
- Android(java)学习笔记162:Android启动过程(转载)
转载路径为: http://blog.jobbole.com/67931/ 1. 关于Android启动过程的问题: 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样 ...
- 服务器CPU使用率过高排查与解决思路
发现服务器的cpu使用率特别高 排查思路: -使用top或者mpstat查看cpu的使用情况# mpstat -P ALL 2 1Linux 2.6.32-358.el6.x86_64 (linux— ...
- Clean Code(三):注释
在工作中经常在刚开始写代码的时候,写下类与方法的注释,时间久了,CR多了,也不可能一直去修改注释了.加班都累成dog.注释才不改呢,就是这么任性,哈哈. 项目久了,注释会欺骗阅读者,本人被骗过,也骗过 ...
- JVM笔记7:类加载器
虚拟机设计团队把类加载阶段中的"通过一个类的全限定名来获取描述此类的二进制字节流"这个动作放到Java虚拟机外部实现,以便让应用程序自己决定如何去获取所需要的类,实现这个动作的代码 ...
- tcl/tk实例详解——glob使用例解
glob命令 这里以实例的形式解释一下glob命令的用法,很多时候纯粹的语法讲解根本讲不清楚,往往没有一个例子清晰,一下就glob命令进行一些分析,环境为Tclsh85,操作系统为windows XP ...
- ASP.NET MVC(一) 什么是Razor
Razor 是一种向网页添加基于服务器的代码的标记语法 Razor 不是编程与语言.它是服务端标记语言. 当网页被写入浏览器时,基于服务器的代码能够创建动态内容.在网页加载时,服务器在向浏览器返回页面 ...
- 从入行到现在(.net)
每次写东西都不知道怎么去开头.因为一想到要写东西.脑子里面浮现出来的开头就太多. 进园子很久从开始只是关注别人讲的技术,别人讲的基础,到现在更多的去看大家的随笔和新闻.这两年我从零基础的外行人逐渐进入 ...