変数の共有

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"],
)