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 aumenta el tamaño de tu base de código y tus archivos BUILD
, 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"],
)
La duplicación de código en archivos BUILD
suele ser correcta. Esto permite que el archivo sea más legible: se puede leer y interpretar cada declaración sin 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 de código pueden evitar este tipo de modificaciones automatizadas.
Si es útil compartir valores (por ejemplo, si los valores deben mantenerse sincronizados), puedes ingresar 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
. Por convención, usa letras mayúsculas para nombrar constantes globales.
Comparte 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"],
)