BUILD
ファイルはシンプルで宣言的であるように設計されています。通常、一連のターゲット宣言で構成されます。コードベースと BUILD
ファイルが大きくなるにつれて、次のような重複が見つかる可能性があります。
cc_library(
name = "foo",
copts = ["-DVERSION=5"],
srcs = ["foo.cc"],
)
cc_library(
name = "bar",
copts = ["-DVERSION=5"],
srcs = ["bar.cc"],
deps = [":foo"],
)
通常、BUILD
ファイルのコードの重複は問題ありません。これにより、ファイルの読みやすさが向上します。各宣言は、コンテキストなしで読み取ることができ、理解できます。これは、人間だけでなく、外部ツールにとっても重要です。たとえば、ツールは BUILD
ファイルを読み取って更新し、不足している依存関係を追加できます。コードのリファクタリングとコードの再利用により、このような自動化された変更は防止できる場合があります。
値を共有することが有用な場合(値を同期する必要がある場合など)は、変数を導入できます。
COPTS = ["-DVERSION=5"]
cc_library(
name = "foo",
copts = COPTS,
srcs = ["foo.cc"],
)
cc_library(
name = "bar",
copts = COPTS,
srcs = ["bar.cc"],
deps = [":foo"],
)
複数の宣言で値 COPTS
が使用されるようになりました。慣例として、グローバル定数の名前には大文字を使用します。
複数の BUILD ファイル間で変数を共有する
複数の BUILD
ファイル間で値を共有する必要がある場合は、.bzl
ファイルに値を配置する必要があります。.bzl
ファイルには、BUILD
ファイルで使用できる定義(変数と関数)が含まれています。
path/to/variables.bzl
に次のように記述します。
COPTS = ["-DVERSION=5"]
次に、BUILD
ファイルを更新して変数にアクセスします。
load("//path/to:variables.bzl", "COPTS")
cc_library(
name = "foo",
copts = COPTS,
srcs = ["foo.cc"],
)
cc_library(
name = "bar",
copts = COPTS,
srcs = ["bar.cc"],
deps = [":foo"],
)