El propósito de los archivos BUILD
es que sean simples y declarativos. Por lo general, consistirán en una serie de declaraciones de destino. Como tu base de código y tu BUILD
Si archivos adjuntos se agrandan, es probable que notes algunos duplicados, como los 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 archivos BUILD
es correcta. Esto puede hacer que el archivo sea más legible: cada declaración se puede leer y comprender sin ningún contexto. Esta
es importante, no solo para las personas, sino también para las herramientas externas. Por ejemplo, un
Es posible que la herramienta pueda leer y actualizar archivos BUILD
para agregar las dependencias que faltan.
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
. Por convención, usa mayúsculas
letras 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"],
)