変数の共有

問題を報告する ソースを表示

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