Cómo compartir variables

Informar un problema Ver código fuente Nocturno · 8.4 · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

Los archivos BUILD deben ser simples y declarativos. Por lo general, constarán de una serie de declaraciones de destino. A medida que tu base de código y tus archivos BUILD crezcan, probablemente notarás cierta duplicación, como las siguientes:

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

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

Por lo general, la duplicación de código en los archivos BUILD no es un problema. Esto puede hacer que el archivo sea más legible: cada declaración se puede leer y comprender sin ningún contexto. Esto es importante no solo para los humanos, sino también para las herramientas externas. Por ejemplo, una herramienta podría leer y actualizar archivos BUILD para agregar dependencias faltantes. La refactorización y la reutilización del código pueden evitar este tipo de modificación automatizada.

Si es útil compartir valores (por ejemplo, si los valores deben mantenerse sincronizados), puedes introducir una variable:

COPTS = ["-DVERSION=5"]

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

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

Ahora, varias declaraciones usan el valor COPTS. Por convención, usa letras mayúsculas para nombrar las constantes globales.

Cómo compartir variables en varios archivos BUILD

Si necesitas compartir un valor en varios archivos BUILD, debes colocarlo en un archivo .bzl. Los archivos .bzl contienen definiciones (variables y funciones) que se pueden usar en archivos BUILD.

En path/to/variables.bzl, escribe lo siguiente:

COPTS = ["-DVERSION=5"]

Luego, puedes actualizar tus archivos BUILD para acceder a la variable:

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