Bazel 语法详解
Bazel 的核心是 WORKSPACE
和 BUILD
文件。它们使用 Starlark 语言(一种 Python 方言)编写。以下是 Bazel 语法的详细说明。
1. WORKSPACE
文件
WORKSPACE
文件用于定义工作空间的根目录,并声明外部依赖(如第三方库或工具链)。它是一个全局配置文件。
示例:
workspace(name = "my_project")
load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive")
# 下载一个外部依赖(例如 rules_go)
http_archive(
name = "io_bazel_rules_go",
sha256 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
urls = ["https://github.com/bazelbuild/rules_go/releases/download/v0.30.0/rules_go-v0.30.0.zip"],
)
# 加载外部依赖
load("@io_bazel_rules_go//go:deps.bzl", "go_rules_dependencies", "go_register_toolchains")
go_rules_dependencies()
go_register_toolchains()
关键点:
workspace(name = "my_project")
:定义工作空间的名称,必须是唯一的。load()
:用于加载外部规则或工具。http_archive()
:用于下载外部依赖。
2. BUILD
文件
BUILD
文件用于定义构建目标(如二进制文件、库、测试等)。每个目录可以有一个或多个 BUILD
文件。
示例:
# 定义一个 C++ 二进制文件
cc_binary(
name = "hello_world",
srcs = ["main.cc"],
deps = [":hello_lib"],
)
# 定义一个 C++ 库
cc_library(
name = "hello_lib",
srcs = [</