基础
- 在项目根目录创建WORKSPACE空文件(非目录)
- 创建BUILD文件
bazel build //[path]:[target-name]
WORKSPACE
- WORKSPACE文件将目录及其内容标识为Bazel工作区,并位于项目目录结构的根目录中
- 工作区中包含
BUILD
文件的目录为一个package
BUILD文件
BUILD文件中包含bazel命令,最重要的便是build rule, 每个build rule实例,即为一个target,指向一组特定的源文件或依赖,如下
cc_binary(
name = "hello-world",
srcs = ["hello-world.cc"],
deps = ["
:hello-greet "]
)
查看依赖关系图
- 命令:
bazel query --notool_deps --noimplicit_deps "deps(//main:hello-world)" \ --output graph
- 打开GraphViz
- 将生成的关系图复制到网站生成关系图
若在ubuntu中,可直接下载sudo apt update && sudo apt install graphviz xdot
。
按如下命令生成关系图xdot <(bazel query --notool_deps --noimplicit_deps "deps(//main:hello-world)" \ --output graph)
多包例子
包含2个package,和3个target
#Tree列表
└──stage3
├── main
│ ├── BUILD
│ ├── hello-world.cc
│ ├── hello-greet.cc
│ └── hello-greet.h
├── lib
│ ├── BUILD
│ ├── hello-time.cc
│ └── hello-time.h
└── WORKSPACE
#//lib.BUILD
cc_library(
name = "hello-time",
srcs = ["hello-time.cc"],
hdrs = ["hello-time.h"],
visibility = ["//main:__pkg__"],
)
#//main/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",
"//lib:hello-time",
],
)
标签引用target语法//path/to/package:target-name
- 若
target
为rule target
,则//path/to/package
为包含BUILD的目录,target-name
即BUILD
内的name
- 若
target
为file target
,//path/to/package
则为package的根路径,target-name
为目标文件的名称【包括其全路径】