Apache Heron初体验

Step 1. Clone Project(Linux下命令: git clone https://github.com/bazelbuild/bazel.git)

 

Bazel是个构建、测试工具,类似Make, Maven以及 Gradle,主要优点有:

      抽象的、人类可阅读的、面向语义的、高层次编译指令,用来描述项目的编译属性。不像其他编译工具你还要为很细小的编译细节指定编译、链接行为,Bazel控制的对象是库、二进制程序、脚本、数据集等,让你不再需要处理编译器、链接器层面的问题。

 

      快速、可靠。Bazel会跟踪已经执行过的工作,并且追踪文件内容、构建命令的发生的改变,这样就知道什么时候需要重新构建,也只构建这一部分。为了进一步提升构建速度,你可以对工程进行高并发以及增量构建配置。

      支持Linux、MacOS、Windows平台,在同一个工程中能够构建用于多个平台的二进制程序以及可部署包,这里说的平台包括桌面电脑,服务器,移动端。

      可伸缩性。Bazel处理包含了10万多个源代码文件时,依然具有敏捷性。而且,它支持数以万计的多个repositories和用户。

      可扩展性。支持多种编程语言,你可以扩展Bazel,来支持任何其他语言和框架。

 

 

安装Bazel

 

      1. 为工程新建一个workspace,也就是Bazel查找输入和构建文件的路径,同时用来保存输出。

      2. 编辑BUID文件,这个文件将指导Bazel的构建过程。

      3. 使用Starlark声明构建目标,Starlark是个domain-specific 语言。

             a. 构建目标需要指定一组输入artifacts(构件)作为Bazel构建时需要增加的依赖,一个用来构建的规则,以及配置构建规则的选项。

             b. 构建规则指定了Bazel会使用哪些构建工具,比如编译器和链接器,以及它们的配置。对于支持的语言,在支持的平台上,Bazel自带一些编译规则,覆盖了大多数最常用的artifact(构件)种类。

      4. 执行bazel命令,bazel将在workspace中生成输出。

      5. 除了用来构建目标程序,你也可以用bazel来测试和查询,来跟踪代码依赖。

 

Bazel工作原理

1. 加载与target相关的BUILD文件。

 

 

2. 分析输入以及它们的依赖,根据指定的构建规则,生成action-graph。

3. 执行action-graph中的action,直到生成输出target为止。

4. 因为Bazel具有cache机制,因此bazel必然需要识别、重用cache的artifacts,只重新构建或者重新测试改变了的那一部分。为了进一步确保正确性,你可以配置bazel,让它的构建、测试过程通过沙箱完成。

      弱弱问一句,action-graph是啥?

      它表述了构建的artifacts,彼此之间的关系,以及bazel可能会执行的action。幸亏有action-graph,bazel才能跟踪文件内容以及action的变更(比如构建或者测试命令),bazel才能知道哪些工作之前已经完成,它也使跟踪代码依赖变得更容易。
 

 

我们怎么用Bazel呢?

      下面以一个C++程序为例,学习以下内容:

    1. 构建target

    2. 可视化展示工程的依赖

    3. 把项目切割成多个targets和packages

    4. 控制target在不同packages里的可见性

    5. 通过label查找target

 

 

 

1. 克隆下来实例代码,不然自己写起来太慢了

 

git clone https://github.com/bazelbuild/examples

2. 查看下这个project的目录结构

cpp-tutorial
├── README.md
├── stage1
│   ├── main
│   │   ├── BUILD
│   │   └── hello-world.cc
│   ├── README.md
│   └── WORKSPACE
├── stage2
│   ├── main
│   │   ├── BUILD
│   │   ├── hello-greet.cc
│   │   ├── hello-greet.h
│   │   └── hello-world.cc
│   ├── README.md
│   └── WORKSPACE
└── stage3
    ├── lib
    │   ├── BUILD
    │   ├── hello-time.cc
    │   └── hello-time.h
    ├── main
    │   ├── BUILD
    │   ├── hello-greet.cc
    │   ├── hello-greet.h
    │   └── hello-world.cc
    ├── README.md
    └── WORKSPACE

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值