从一个BUILD 文件学习:
package(default_visibility = ["//:internal"])
load("@subpar//:subpar.bzl", "par_binary")
py_library(
name = "a",
srcs = ["a.py"],
)
filegroup(
name = "b",
srcs = ["b.txt"],
)
py_test(
name = "c",
srcs = ["c.py"],
data = [":b"],
deps = [":a"],
)
par_binary(
name = "d",
srcs = ["d.py"],
deps = [":a"],
)
1. package(default_visibility = ["//:internal”]) # 每个project下有WORKSPACE,每个project又包含多个package,定义package的visibility
#或者在每个target 里定义visibility:
cc_binary(
name=“foo”,
srcs=[foo.cc],
visibility=[//visibility:public],
#visibility=["//visibility:private”], # 只有package内部可以用
#visibility=["//some/package:__pkg__”】,#只有在some/package 中可以用,也可以些多个["//some/package:__pkg__”,"//some1/package:__pkg__”】
)
...
2. load("@subpar//:subpar.bzl", "par_binary”)
Bazel 的扩展代码写在 .bzl 文件里,通过load() 函数在WORKSPACE或BUILD文件中调用;
.bzel 是Skylark语言写的,是一种类python语言(https://docs.bazel.build/versions/master/skylark/language.html)。
load(label, symbols…) 会执行@subpar//:subpar.bzl 模块,加载par_binary
load("//path/to/rules:my_defs.bzl", BUILD_DEF_COMPILER_FLAGS="COMPILER_FLAGS", "LINKER_FLAGS”) #也可以一次加载多个
3.py_library/ filegroup/ py_test /par_binary
py_library/ filegroup/ py_test bazel 中定义的rules, par_binary 是在subpar 中定义的rule
name:target 的名字
srcs: 生成target的代码
deps: 生成target的依赖
data: 生成target 需要的数据
A
py_binary
is an executable Python program consisting of a collection of.py
source files (possibly belonging to otherpy_library
rules), a*.runfiles
directory tree containing all the code and data needed by the program at run-time, and a stub script that starts up the program with the correct initial environment and data.A
py_library generates library
A
py_test()
rule compiles a test. A test is a binary wrapper around some test code.