bazel相关

官方文档:bazel官方文档

bazel简介

bazel是Google开源的一套编译构建工具,广泛应用于Google内部。
主要优点:
1 构建快。支持增量编译。对依赖关系进行了优化,从而支持并发执行。
2 可构建多种语言。bazel可用来构建Java C++ Android ios等很多语言和框架,并支持mac windows linux等不同平台
3 可伸缩。可处理任意大小的代码库,可处理多个库,也可以处理单个库
4 可扩展。使用bazel扩展语言可支持新语言和新平台。

整体结构

1.workspace
workspace是表示整个项目的,也叫repo,必须在项目的根目录下建一个WORKSPACE文件来定义项目的根目录,bazel会忽略所有项目子目录下的WORKSPACE文件。主要用来声明项目所依赖的库。
2.package
package是项目中的模块,也就是一个一个包,包在组织上比较随意,可以根据项目需求来定,你想哪个文件夹中的东西成为一个包,就在那个文件夹的目录里创建一个BUILD文件即可,包的管理范围包括子目录里的东西,但不包括子包所包括的内容。如下:

.../project/
	WORKSPACE
	lib/
		BUILD
		...
	src/
		BUILD
		...
		other1/
			BUILD
		other2/
			...

则lib, src以及other1都是packages,但other1目录里的东西不属于src包,但other2里的东西都属于src包。包和包之间的内容不重叠,不包含。
3.build
BUILD文件用于告知Bazel如何编译,要输出什么样的二进制文件或库;BUILD文件中的每一条编译指令被称为一个target,它指向一系列的源文件和依赖,一个target也可以指向别的target。

//stage1
cc_binary(
    name = "hello-world",           //target
    srcs = ["hello-world.cc"],      //源文件是ello-world.cc
)
//stage2
cc_binary(
    name = "hello-greet",           //第一个target
    srcs = ["hello-greet.cc"],      //源文件
    hdrs = ["hello-greet.h"],       //头文件
)
cc_binary(
    name = "hello-world",           //第二个target,一个BUILD文件可以有多个target
    srcs = ["hello-world.cc"],      //源文件
    deps = [":hello-greet"],        //依赖于hello-greet,也就是说要先生成hello-greet再生成hello-world
    )
//stage3:包含两个package:main和lib
//1.main下的BUILD
cc_binary(
    name = "hello-time",
    srcs = ["hello-time.cc"],
    hdrs = ["hello-time.h"],
    visibility = ["//main:__pkg__"],        //默认情况下,targets只对同一个BUILD文件里的其他tagets可见,现在设置为所有target可见
)

//2.lib下的BUILD
cc_library(
    name = "hello-greet",
    srcs = ["hello-greet.cc"],
    hdrs = ["hello-greet.h"],
)

cc_binary(
    name = "hello-world",
    srcs = "hello-world.cc",
    deps = [":hello-greet",         //依赖于本文件夹下的target:hello-greet
            "//lib:hello-time"      //依赖于lib文件夹下的target:hello-time
           ],
)

其中,binary代表bin文件的构建结构,library代表库的构建结构,具体字段可以查阅官方文档。

note

1.bazel在构建一些大型项目时,总会需要依赖于外部的库,如git repository和http等,需要在workspace中声明好依赖关系,在构建过程中会先从给出的路径中预下载至本地保存。注意!当依赖的外部库发生变化时bazel无法及时更新内容,需要先进行bazel clean --expunge.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值