BazelCon 2022 findet vom 16. bis 17. November in New York und online statt.
Jetzt anmelden

Freigabe von Variablen

Mit Sammlungen den Überblick behalten Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.

BUILD-Dateien sind einfach und deklarativ. Sie bestehen in der Regel aus einer Reihe von Zieldeklarationen. Wenn Ihre Codebasis und Ihre BUILD-Dateien größer werden, werden Sie wahrscheinlich einige Duplikate bemerken, z. B.:

cc_library(
  name = "foo",
  copts = ["-DVERSION=5"],
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = ["-DVERSION=5"],
  srcs = ["bar.cc"],
  deps = [":foo"],
)

Code dupliziert in BUILD-Dateien normalerweise. Dies kann die Lesbarkeit der Datei verbessern. Jede Deklaration kann ohne Kontext gelesen und verstanden werden. Dies ist wichtig, nicht nur für Menschen, sondern auch für externe Tools. Beispielsweise kann ein Tool BUILD-Dateien lesen und aktualisieren, um fehlende Abhängigkeiten hinzuzufügen. Diese Art der automatischen Änderung kann durch die Coderefaktorierung und die Wiederverwendung des Codes verhindert werden.

Wenn es nützlich ist, Werte zu teilen, z. B. wenn die Werte synchronisiert sein müssen, können Sie eine Variable einführen:

COPTS = ["-DVERSION=5"]

cc_library(
  name = "foo",
  copts = COPTS,
  srcs = ["foo.cc"],
)

cc_library(
  name = "bar",
  copts = COPTS,
  srcs = ["bar.cc"],
  deps = [":foo"],
)

Für mehrere Deklarationen wird jetzt der Wert COPTS verwendet. Verwenden Sie Konventionen, um globale Konstanten in Großbuchstaben zu markieren.

Variablen für mehrere BUILD-Dateien freigeben

Wenn Sie einen Wert für mehrere BUILD-Dateien freigeben möchten, müssen Sie ihn in eine .bzl-Datei einfügen. .bzl-Dateien enthalten Definitionen (Variablen und Funktionen), die in BUILD-Dateien verwendet werden können.

Schreiben Sie in path/to/variables.bzl:

COPTS = ["-DVERSION=5"]

Anschließend können Sie die BUILD-Dateien aktualisieren, um auf die Variable zuzugreifen:

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