Bazel acepta muchas opciones. Algunas opciones varían con frecuencia (por ejemplo,
--subcommands
), mientras que otras permanecen iguales en varias compilaciones (como
--package_path
). A fin de evitar especificar estas opciones sin cambios para cada compilación
(y otros comandos), puedes especificar opciones en un archivo de configuración, llamado
.bazelrc
¿Dónde están los archivos .bazelrc
?
Bazel busca archivos de configuración opcionales en las siguientes ubicaciones:
en el orden que se muestra a continuación. Las opciones se interpretan en este orden, por lo que
opciones en archivos posteriores pueden anular un valor de un archivo anterior si un
surge el conflicto. Todas las opciones que controlan cuáles de estos archivos se cargan son
opciones de inicio, lo que significa que deben ocurrir después de bazel
y
antes del comando (build
, test
, etcétera).
El archivo RC del sistema, a menos que
--nosystem_rc
esté presente.Ruta:
- En Linux, macOS y Unix:
/etc/bazel.bazelrc
- En Windows:
%ProgramData%\bazel.bazelrc
No es un error si este archivo no existe.
Si se requiere otra ubicación especificada por el sistema, debes crear una personalizada Objeto binario de Bazel, que anula el valor
BAZEL_SYSTEM_BAZELRC_PATH
en//src/main/cpp:option_processor
La ubicación especificada por el sistema puede contener referencias de variables de entorno, como${VAR_NAME}
en Unix o%VAR_NAME%
en Windows.- En Linux, macOS y Unix:
El archivo RC del lugar de trabajo, a menos que
--noworkspace_rc
esté presente.Ruta de acceso:
.bazelrc
en el directorio de tu lugar de trabajo (junto al nombre deWORKSPACE
).No es un error si este archivo no existe.
El archivo RC principal, a menos que
--nohome_rc
esté presente.Ruta:
- En Linux, macOS y Unix:
$HOME/.bazelrc
- En Windows:
%USERPROFILE%\.bazelrc
(si existe) o%HOME%/.bazelrc
No es un error si este archivo no existe.
- En Linux, macOS y Unix:
El archivo RC especificado por el usuario, si se especifica con
--bazelrc=file
Esta marca es opcional, pero también se puede especificar varias veces.
/dev/null
indica que se ignorarán todos los demás--bazelrc
, lo que es útil para inhabilitar la búsqueda de un archivo rc del usuario, como en el lanzamiento compilaciones.Por ejemplo:
--bazelrc=x.rc --bazelrc=y.rc --bazelrc=/dev/null --bazelrc=z.rc
- Se leen
x.rc
yy.rc
. z.rc
se ignora debido al/dev/null
anterior.
- Se leen
Además de este archivo de configuración opcional, Bazel busca un rc global. . Para obtener más detalles, consulta la sección global de bazelrc.
Sintaxis y semántica de .bazelrc
Como todos los “rc” de UNIX .bazelrc
, es un archivo de texto con un encabezado basado
y la gramática. Se ignoran las líneas vacías y las líneas que comienzan con #
(comentarios). Cada
línea contiene una secuencia de palabras, a las que se les asignan tokens según la misma
como el shell de Bourne.
Importaciones
Las líneas que comienzan con import
o try-import
son especiales. Úsalas para cargar.
otro “rc” archivos. Para especificar una ruta de acceso relativa a la raíz del lugar de trabajo, sigue estos pasos:
escribir import %workspace%/path/to/bazelrc
La diferencia entre import
y try-import
es que Bazel falla si los
Falta el archivo de import
(o no se puede leer), pero no es así para un archivo try-import
.
.
Prioridad de la importación:
- Las opciones del archivo importado tienen prioridad sobre las opciones especificadas antes. la sentencia de importación.
- Las opciones especificadas después de la sentencia de importación tienen prioridad sobre el del archivo importado.
- Las opciones de los archivos importados más tarde tienen prioridad sobre los archivos importados anteriormente.
Valores predeterminados de las opciones
La mayoría de las líneas de bazelrc definen los valores de opción predeterminados. La primera palabra de cada especifica cuándo se aplican estos valores predeterminados:
startup
: Son las opciones de inicio, que van antes del comando y se describen. enbazel help startup_options
.common
: Son opciones que se deben aplicar a todos los comandos de Bazel compatibles. de ellos. Si un comando no admite una opción especificada de esta manera, se ignorará, siempre y cuando sea válida para algún otro comando de Bazel. Ten en cuenta que esto solo se aplica a los nombres de opciones si el comando actual acepta una opción con el nombre especificado, pero no admite el valor especificado fallará.always
: Son opciones que se aplican a todos los comandos de Bazel. Si un comando no admitir una opción especificada de esta manera, fallará.command
: Es el comando de Bazel, comobuild
oquery
al que se agregan las opciones. aplicar. Estas opciones también se aplican a todos los comandos que heredan comando especificado. (Por ejemplo,test
hereda debuild
).
Cada una de estas líneas se puede usar más de una vez, y los argumentos que siguen al
primera palabra se combinan como si hubieran aparecido en una sola línea. (Usuarios de CVS,
otra herramienta con una "navaja Suiza" de línea de comandos, encontrarás la
sintaxis similar a la de .cvsrc
). Por ejemplo, las líneas:
build --test_tmpdir=/tmp/foo --verbose_failures
build --test_tmpdir=/tmp/bar
se combinan de la siguiente manera:
build --test_tmpdir=/tmp/foo --verbose_failures --test_tmpdir=/tmp/bar
por lo que las marcas efectivas son --verbose_failures
y --test_tmpdir=/tmp/bar
.
Prioridad de la opción:
- Las opciones de la línea de comandos siempre tienen prioridad sobre las de los archivos rc.
Por ejemplo, si un archivo rc dice
build -c opt
, pero la marca de la línea de comandos es-c dbg
, la marca de línea de comandos tiene prioridad. Dentro del archivo rc, la prioridad se rige por la especificidad: líneas para una tiene prioridad sobre las líneas para un comando menos específico.
La especificidad se define por herencia. Algunos comandos heredan opciones de otros comandos, lo que hace que el comando heredero sea más específico que el kubectl. Por ejemplo,
test
hereda del comandobuild
, por lo que todas las marcasbazel build
son válidas parabazel test
, y todas las líneasbuild
se aplican también abazel test
a menos que haya una líneatest
para la misma opción. Si la columna dice:test -c dbg --test_env=PATH
build -c opt --verbose_failures
Luego,
bazel build //foo
usará-c opt --verbose_failures
ybazel test //foo
usará--verbose_failures -c dbg --test_env=PATH
.El grafo de herencia (especificidad) es el siguiente:
- Cada comando se hereda de
common
- Los siguientes comandos heredan (y son más específicos que) que:
build
:test
,run
,clean
,mobile-install
yinfo
,print_action
,config
,cquery
yaquery
coverage
hereda detest
- Cada comando se hereda de
Se muestran dos líneas que especifican opciones para el mismo comando con la misma especificidad se analizan en el orden en que aparecen en el archivo.
Como esta regla de prioridad no coincide con el orden de los archivos, ayuda legibilidad si sigues el orden de prioridad dentro de los archivos rc: comienza con
common
en la parte superior y finalizan con los comandos más específicos en el al final del archivo. De esta manera, el orden en el que se leen las opciones es el que el orden en que se aplican, lo cual es más intuitivo.
Los argumentos especificados en una línea de un archivo rc pueden incluir argumentos que son y no opciones, como los nombres de los objetivos de compilación, etcétera. Estas, como el las opciones especificadas en los mismos archivos tienen menor precedencia que las de sus elementos del mismo nivel en la línea de comandos y siempre están antepuestos a la lista explícita de instancias los argumentos de opción.
--config
Además de establecer valores predeterminados de opciones, el archivo rc se puede usar para agrupar opciones
y proporcionan una abreviatura de agrupaciones comunes. Para ello, se debe agregar un :name
sufijo del comando. Estas opciones se ignoran de forma predeterminada, pero se omitirán
se incluyen cuando está presente la opción --config=name
ya sea en la línea de comandos o en un archivo .bazelrc
, de manera recursiva, incluso dentro de
otra definición de config. Las opciones especificadas por command:name
solo se mostrarán
expandido para los comandos aplicables, en el orden de prioridad descrito anteriormente.
--config=foo
se expande a las opciones definidas en
los archivos rc “in situ” para que las opciones
especificada para la configuración tienen la misma prioridad que la opción --config=foo
que tenían.
Esta sintaxis no se extiende al uso de startup
para configurar
opciones de inicio. Parámetro de configuración
Se ignorará startup:config-name --some_startup_option
en .bazelrc.
Ejemplo
Este es un archivo ~/.bazelrc
de ejemplo:
# Bob's Bazel option defaults
startup --host_jvm_args=-XX:-UseParallelGC
import /home/bobs_project/bazelrc
build --show_timestamps --keep_going --jobs 600
build --color=yes
query --keep_going
# Definition of --config=memcheck
build:memcheck --strip=never --test_timeout=3600
Otros archivos que rigen el comportamiento de Bazel
.bazelignore
Puedes especificar directorios dentro del espacio de trabajo
que quieres que Bazel ignore, como proyectos relacionados
que usan otros sistemas de compilación. Colocar un archivo llamado
.bazelignore
en la raíz del lugar de trabajo
y agrega los directorios que quieres que Bazel ignore, uno por
línea. Las entradas se relacionan con la raíz del lugar de trabajo.
El archivo bazelrc global
Bazel lee archivos de bazelrc opcionales en este orden:
- Archivo rc-del sistema ubicado en
etc/bazel.bazelrc
- El archivo rc-de Workspace ubicado en
$workspace/tools/bazel.rc
. - Archivo rc-principal ubicado en
$HOME/.bazelrc
Cada archivo Bazelrc que se incluye aquí tiene una marca correspondiente que se puede usar para
inhabilitarlas (p.ej., --nosystem_rc
, --noworkspace_rc
, --nohome_rc
). Puedes
También puedes hacer que Bazel ignore todos los bazelrcs pasando --ignore_all_rc_files
.
como la mejor opción de inicio.