Los archivos BUILD
están diseñados para ser simples y declarativos. Por lo general, consistirán en una serie de declaraciones de destino. A medida que tu base de código y tus archivos BUILD
se agranden, es probable que notes algunas duplicaciones, 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
es aceptable. 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 las personas, sino también para las herramientas externas. Por ejemplo, una herramienta podría leer y actualizar archivos BUILD
para agregar las dependencias faltantes.
La refactorización y la reutilización de código pueden evitar este tipo de modificación automática.
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"],
)
Varias declaraciones ahora usan el valor COPTS
. De forma convencional, usa letras mayúsculas para nombrar 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"],
)