基础
- 在项目根目录创建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.BUILDcc_library(name = "hello-time",srcs = ["hello-time.cc"],hdrs = ["hello-time.h"],visibility = ["//main:__pkg__"],)#//main/BUILDcc_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为目标文件的名称【包括其全路径】
