基础

  1. 在项目根目录创建WORKSPACE空文件(非目录)
  2. 创建BUILD文件
  3. bazel build //[path]:[target-name]

WORKSPACE

  • WORKSPACE文件将目录及其内容标识为Bazel工作区,并位于项目目录结构的根目录中
  • 工作区中包含BUILD文件的目录为一个package

BUILD文件

BUILD文件中包含bazel命令,最重要的便是build rule, 每个build rule实例,即为一个target,指向一组特定的源文件或依赖,如下

  1. cc_binary(
  2. name = "hello-world",
  3. srcs = ["hello-world.cc"],
  4. deps = ["
  5. :hello-greet "]
  6. )

查看依赖关系图

  1. 命令:bazel query --notool_deps --noimplicit_deps "deps(//main:hello-world)" \ --output graph
  2. 打开GraphViz
  3. 将生成的关系图复制到网站生成关系图

若在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

  1. #Tree列表
  2. └──stage3
  3. ├── main
  4. ├── BUILD
  5. ├── hello-world.cc
  6. ├── hello-greet.cc
  7. └── hello-greet.h
  8. ├── lib
  9. ├── BUILD
  10. ├── hello-time.cc
  11. └── hello-time.h
  12. └── WORKSPACE
  13. #//lib.BUILD
  14. cc_library(
  15. name = "hello-time",
  16. srcs = ["hello-time.cc"],
  17. hdrs = ["hello-time.h"],
  18. visibility = ["//main:__pkg__"],
  19. )
  20. #//main/BUILD
  21. cc_library(
  22. name = "hello-greet",
  23. srcs = ["hello-greet.cc"],
  24. hdrs = ["hello-greet.h"],
  25. )
  26. cc_binary(
  27. name = "hello-world",
  28. srcs = ["hello-world.cc"],
  29. deps = [
  30. ":hello-greet",
  31. "//lib:hello-time",
  32. ],
  33. )

标签引用target语法
//path/to/package:target-name

  • targetrule target,则//path/to/package为包含BUILD的目录,target-nameBUILD内的name
  • targetfile target//path/to/package则为package的根路径,target-name为目标文件的名称【包括其全路径】