Bazel
Workspace, Repositories, Packages, Targets, Labels
1 | project/ |
WORKSPACE 文件标识了项目的根目录,这个目录下也会存放 bazel 的输出。WORKSPACE 可以为空,也可以包含对外部依赖的引用。代码以仓库(Repositories)的形式组织,包含 WORKSPACE 文件的目录称为主仓库(main repository, @)。
含有BUILD或BUILD.bazel的目录是一个包。包包含该目录下的所有文件,包括子目录(含有BUILD文件的子目录除外,它是另一个包)。包中的元素称为目标(Targets),有以下几类目标。
- 文件(File)
- 源文件(Source File)
- 生成的文件(Generated File)
- 规则(Rule)
- 包组(Package Groups)
目标的名称称为标签(Label),例如 @myrepo//my/app/main:app_binary(@myrepo 内部可以简写为 //my/app/main:app_binary)
标签由冒号分为两部分,包名(my/app/main)和 目标名(app_binary), 当省略冒号时,目标名等同包名最后一段路径,例如//my/app 等价于 //my/app:app。引用当前包内目标时,包名也可以省略,因此以下四种写法等价。
1 | # /文件 /my/app:BUILD 内 |
BUILD 文件中可以定义规则,用以指定输入输出间的关系及构建输出的步骤。
Workspace Rules
1 | local_repository(name, path, repo_mapping) |
例如
1 | # 通过 @my-ssl 引用该仓库 |
BUILD.my-ssl 如下
1 | java_library( |
可以不指定 build_file 而是指定 build_file_content (必须有其中一个),以包含文件中的内容(注意缩进要和BUILD文件一致)
1 | # Loading an extension |
BUILD Rules
C/C++ Rules
1 | cc_binary |
Bazel CLI
1 | bazel clean # 删除输出文件 |