Comandos y opciones

En esta página, se describen las opciones disponibles con varios comandos de Bazel, como bazel build, bazel run y bazel test. Esta página complementa la lista de comandos de Bazel en Compila con Bazel.

Sintaxis de destino

Algunos comandos, como build o test, pueden funcionar en una lista de destinos. Usan una sintaxis más flexible que las etiquetas, lo que se documenta en Especifica destinos para compilar.

Opciones

En las siguientes secciones, se describen las opciones disponibles durante una compilación. Cuando se usa --long en un comando de ayuda, los mensajes de ayuda en línea proporcionan información resumida sobre el significado, el tipo y el valor predeterminado de cada opción.

La mayoría de las opciones solo se pueden especificar una vez. Cuando se especifica varias veces, la última instancia gana. Las opciones que se pueden especificar varias veces se identifican en la ayuda en línea con el texto "puede usarse varias veces".

Ubicación del paquete

--package_path

Esta opción especifica el conjunto de directorios que se buscan para encontrar el archivo BUILD para un paquete determinado.

Para encontrar sus paquetes, Bazel busca en su ruta de acceso. Esta es una lista ordenada de directorios de bazel separados por dos puntos, cada uno de los cuales es la raíz de un árbol de fuentes parcial.

Para especificar una ruta de acceso de paquete personalizada con la opción --package_path, haz lo siguiente:

  % bazel build --package_path %workspace%:/some/other/root

Los elementos de la ruta de acceso del paquete pueden especificarse en tres formatos:

  1. Si el primer carácter es /, la ruta es absoluta.
  2. Si la ruta de acceso comienza con %workspace%, se toma en relación con el directorio de Bazel contenedor más cercano. Por ejemplo, si tu directorio de trabajo es /home/bob/clients/bob_client/bazel/foo, la string %workspace% en la ruta del paquete se expande a /home/bob/clients/bob_client/bazel.
  3. Todo lo demás se toma en relación con el directorio de trabajo. Por lo general, esto no es lo que quieres hacer, y puede que se comporte de forma inesperada si usas Bazel desde directorios debajo del lugar de trabajo de Bazel. Por ejemplo, si usas el elemento . de ruta de acceso del paquete y, luego, cd para el directorio /home/bob/clients/bob_client/bazel/foo, los paquetes se resolverán desde el directorio /home/bob/clients/bob_client/bazel/foo.

Si usas una ruta de paquete no predeterminada, especifícala en tu archivo de configuración de Bazel para mayor comodidad.

Bazel no requiere que ningún paquete esté en el directorio actual, por lo que puedes hacer una compilación desde un lugar de trabajo de Bazel vacío si todos los paquetes necesarios se encuentran en otro lugar de la ruta del paquete.

Ejemplo: Compila desde un cliente vacío

  % mkdir -p foo/bazel
  % cd foo/bazel
  % touch WORKSPACE
  % bazel build --package_path /some/other/path //foo

--deleted_packages

Esta opción especifica una lista separada por comas de paquetes que Bazel debe considerar borrarse y que no deben intentar cargarse desde ningún directorio en la ruta del paquete. Esto se puede usar para simular la eliminación de paquetes sin borrarlos realmente.

Comprobación de errores

Estas opciones controlan las advertencias o la comprobación de errores de Bazel.

--[no]check_visibility

Si esta opción se configura como falsa, las verificaciones de visibilidad descenderán a advertencias. El valor predeterminado de esta opción es verdadero, por lo que se realiza la verificación de visibilidad de forma predeterminada.

--output_filter=regex

La opción --output_filter solo mostrará advertencias de compilación y compilación para los destinos que coincidan con la expresión regular. Si un objetivo no coincide con la expresión regular dada y su ejecución se realiza correctamente, su resultado y error estándar se descartarán.

Estos son algunos valores típicos para esta opción:

`--output_filter='^//(first/project|second/project):'` Muestra el resultado de los paquetes especificados.
`--output_filter='^//((?!(first/bad_project|second/bad_project):).)*$'` No muestra resultados para los paquetes especificados.
`--output_filter=` Muestra todo.
`--output_filter=DONT_MATCH_ANYTHING` No mostrar nada.

Marcas de herramientas

Estas opciones controlan las opciones que Bazel pasará a otras herramientas.

--copt=cc-option

Esta opción toma un argumento que se pasará al compilador. El argumento se pasará al compilador cada vez que se invoque para el procesamiento previo, la compilación o el ensamblaje de código C, C++ o ensamblador. No se pasará durante la vinculación.

Esta opción se puede usar varias veces. Por ejemplo:

  % bazel build --copt="-g0" --copt="-fpic" //foo

Se compilará la biblioteca foo sin tablas de depuración y se generará un código independiente de la posición.

--host_copt=cc-option

Esta opción toma un argumento que se pasará al compilador para los archivos de origen que se compilan en la configuración del host. Es similar a la opción --copt, pero solo se aplica a la configuración del host.

--host_conlyopt=cc-option

Esta opción toma un argumento que se pasará al compilador para los archivos de origen C que se compilan en la configuración del host. Es similar a la opción --conlyopt, pero solo se aplica a la configuración del host.

--host_cxxopt=cc-option

Esta opción toma un argumento que se pasará al compilador para los archivos fuente C++ que se compilan en la configuración del host. Es similar a la opción --cxxopt, pero solo se aplica a la configuración del host.

--host_linkopt=linker-option

Esta opción toma un argumento que se pasará al vinculador para los archivos de origen que se compilan en la configuración del host. Es similar a la opción --linkopt, pero solo se aplica a la configuración del host.

--conlyopt=cc-option

Esta opción toma un argumento que se pasará al compilador cuando se compilen archivos de origen C.

Es similar a --copt, pero solo se aplica a la compilación de C, no a la vinculación ni la compilación de C++. Por lo tanto, puedes pasar opciones específicas de C (como -Wno-pointer-sign) mediante --conlyopt.

--cxxopt=cc-option

Esta opción toma un argumento que se pasará al compilador cuando se compilen archivos de origen C++.

Es similar a --copt, pero solo se aplica a la compilación de C++, no a la compilación ni la vinculación de C. Por lo tanto, puedes pasar opciones específicas de C++ (como -fpermissive o -fno-implicit-templates) mediante --cxxopt.

Por ejemplo:

  % bazel build --cxxopt="-fpermissive" --cxxopt="-Wno-error" //foo/cruddy_code

--linkopt=linker-option

Esta opción toma un argumento que se pasará al compilador durante la vinculación.

Es similar a --copt, pero solo se aplica a la vinculación, no a la compilación. Por lo tanto, puedes pasar opciones del compilador que solo tengan sentido en el momento de la vinculación (como -lssp o -Wl,--wrap,abort) usando --linkopt. Por ejemplo:

  % bazel build --copt="-fmudflap" --linkopt="-lmudflap" //foo/buggy_code

Las reglas de compilación también pueden especificar opciones de vinculación en sus atributos. La configuración de esta opción siempre tiene prioridad. También consulta cc_library.linkopts.

--strip (always|never|sometimes)

Esta opción determina si Bazel quitará la información de depuración de todos los objetos binarios y las bibliotecas compartidas mediante la invocación del vinculador con la opción -Wl,--strip-debug. --strip=always significa que siempre se quitará la información de depuración. --strip=never significa que nunca se quitará la información de depuración. El valor predeterminado de --strip=sometimes significa quitar si --compilation_mode es fastbuild.

  % bazel build --strip=always //foo:bar

compilará el destino y, al mismo tiempo, quitará la información de depuración de todos los objetos binarios generados.

La opción --strip de Bazel corresponde a la opción --strip-debug de ld: solo quita la información de depuración. Si, por alguna razón, deseas quitar todos los símbolos, no solo los símbolos de depuración, deberás usar la opción --strip-all de ld, lo que puedes hacer pasando --linkopt=-Wl,--strip-all a Bazel. Además, ten en cuenta que configurar la marca --strip de Bazel anulará --linkopt=-Wl,--strip-all, por lo que solo debes configurar uno de ellos.

Si solo compilas un objeto binario y quieres quitar todos los símbolos, también puedes pasar --stripopt=--strip-all y compilar de forma explícita la versión //foo:bar.stripped del destino. Como se describe en la sección --stripopt, se aplica una acción de eliminación después de que se vincula el objeto binario final, en lugar de incluir la eliminación en todas las acciones de vínculo de la compilación.

--stripopt=strip-option

Esta es una opción adicional para pasar al comando strip cuando se genera un objeto binario *.stripped. El valor predeterminado es -S -p. Esta opción se puede usar varias veces.

--fdo_instrument=profile-output-dir

La opción --fdo_instrument habilita la generación de resultados del perfil de FDO (optimización dirigida a comentarios) cuando se ejecuta el objeto binario C/C++ compilado. Para GCC, el argumento proporcionado se utiliza como un prefijo de directorio para un árbol de directorios de archivos por objeto de archivos .gcda que contienen información de perfil para cada archivo .o.

Una vez que se haya generado el árbol de datos de perfil, se debe comprimir y proporcionar a la opción --fdo_optimize=profile-zip de Bazel para habilitar la compilación optimizada para FDO.

Para el compilador de LLVM, el argumento también es el directorio en el que se vuelcan los archivos de datos de perfil de LLVM sin procesar. Por ejemplo: --fdo_instrument=/path/to/rawprof/dir/

Las opciones --fdo_instrument y --fdo_optimize no se pueden usar al mismo tiempo.

--fdo_optimize=profile-zip

La opción --fdo_optimize habilita el uso de la información de perfil de archivo por objeto para realizar optimizaciones de FDO (optimización dirigida a comentarios) cuando se compila. Para GCC, el argumento proporcionado es el archivo ZIP que contiene el árbol de archivos .gcda que se generó antes y la información de perfil de cada archivo .o.

Como alternativa, el argumento proporcionado puede apuntar a un perfil automático identificado por la extensión .afdo.

Para el compilador LLVM, el argumento proporcionado debe apuntar al archivo de salida del perfil de LLVM indexado que prepara la herramienta llvm-profdata y debe tener una extensión .profdata.

Las opciones --fdo_instrument y --fdo_optimize no se pueden usar al mismo tiempo.

--[no]output_symbol_counts

Si se habilita, cada vínculo invocado por el oro de un objeto binario ejecutable de C++ generará un archivo de recuentos de símbolos (a través de la opción "oro" --print-symbol-counts). Para cada entrada del vinculador, el archivo registra la cantidad de símbolos definidos y la cantidad de símbolos utilizados en el objeto binario. Esta información se puede usar para realizar un seguimiento de dependencias de vínculos innecesarias. El archivo de recuento de símbolos se escribe en la ruta de salida del objeto binario con el nombre [targetname].sc.

Esta opción está inhabilitada de forma predeterminada.

--java_language_version=version

Esta opción especifica la versión de las fuentes de Java. Por ejemplo:

  % bazel build --java_language_version=8 java/com/example/common/foo:all

compila y permite solo construcciones compatibles con la especificación de Java 8. El valor predeterminado es 11. --> Los valores posibles son 8, 9, 10, 11, 14 y 15, y se pueden extender mediante el registro de cadenas de herramientas de Java personalizadas con default_java_toolchain.

--tool_java_language_version=version

La versión en lenguaje Java que se usa para compilar herramientas que se ejecutan durante una compilación. El valor predeterminado es 11.

--java_runtime_version=version

Esta opción especifica la versión de JVM que se usará para ejecutar el código y las pruebas. Por ejemplo:

  % bazel run --java_runtime_version=remotejdk_11 java/com/example/common/foo:java_application

descarga el JDK 11 de un repositorio remoto y ejecuta la aplicación de Java con él.

El valor predeterminado es localjdk. Los valores posibles son localjdk, localjdk_version, remotejdk_11 y remote_jdk17. Puedes ampliar los valores registrando una JVM personalizada con reglas de repositorio local_java_repository o remote_java_repostory.

--tool_java_runtime_version=version

Es la versión de JVM que se usa para ejecutar las herramientas necesarias durante una compilación. El valor predeterminado es remotejdk_11.

--jvmopt=jvm-option

Esta opción permite pasar los argumentos de opción a la VM de Java. Se puede usar con un argumento grande o varias veces con argumentos individuales. Por ejemplo:

  % bazel build --jvmopt="-server -Xms256m" java/com/example/common/foo:all

usará la VM del servidor para iniciar todos los objetos binarios de Java y establecerá el tamaño del montón de inicio de la VM en 256 MB.

--javacopt=javac-option

Esta opción permite que los argumentos de opción se pasen a javac. Se puede usar con un argumento grande o varias veces con argumentos individuales. Por ejemplo:

  % bazel build --javacopt="-g:source,lines" //myprojects:prog

volverá a compilar un java_binary con la información de depuración predeterminada de javac (en lugar de la predeterminada de Bazel).

La opción se pasa a javac después de las opciones predeterminadas integradas de Bazel para javac y antes de las opciones por regla. La última especificación de cualquier opción para javac gana. Las opciones predeterminadas para javac son las siguientes:

  -source 8 -target 8 -encoding UTF-8

--strict_java_deps (default|strict|off|warn|error)

Esta opción controla si javac comprueba si faltan dependencias directas. Los objetivos de Java deben declarar de manera explícita todos los destinos usados directamente como dependencias. Esta marca le indica a javac que determine los archivos JAR que realmente se usan para verificar el tipo de cada archivo Java y advierte/error si no son el resultado de una dependencia directa del destino actual.

  • off significa que la verificación está inhabilitada.
  • warn significa que javac generará advertencias estándar de Java de tipo [strict] para cada dependencia directa faltante.
  • default, strict y error generarán errores en lugar de advertencias, lo que hará que el destino actual no se compile si se encuentran dependencias directas faltantes. Este también es el comportamiento predeterminado cuando no se especifica la marca.

Semántica de compilación

Estas opciones afectan los comandos de compilación o el contenido del archivo de salida.

--compilation_mode (fastbuild|opt|dbg) (-c)

La opción --compilation_mode (a menudo abreviada como -c, especialmente -c opt) toma un argumento de fastbuild, dbg o opt, y afecta varias opciones de generación de código C/C++, como el nivel de optimización y la integridad de las tablas de depuración. Bazel usa un directorio de salida diferente para cada modo de compilación, por lo que puedes cambiar de modo sin necesidad de volver a compilar por completo cada vez.

  • fastbuild significa compilar lo más rápido posible: generar información de depuración mínima (-gmlt -Wl,-S) y no optimizar. Es el valor predeterminado. Nota: No se establecerá -DNDEBUG.
  • dbg significa que la compilación tiene habilitada la depuración (-g), para que puedas usar gdb (o algún otro depurador).
  • opt significa que la compilación tiene habilitada la optimización y con las llamadas a assert() inhabilitadas (-O2 -DNDEBUG). La información de depuración no se generará en el modo opt, a menos que también pases --copt -g.

--cpu=cpu

Esta opción especifica la arquitectura de CPU de destino que se usará para la compilación de objetos binarios durante la compilación.

--action_env=VAR=VALUE

Especifica el conjunto de variables de entorno disponibles durante la ejecución de todas las acciones. Las variables se pueden especificar por nombre, en cuyo caso, el valor se tomará del entorno de invocación o mediante el par name=value que establece el valor de forma independiente del entorno de invocación.

La marca --action_env se puede especificar varias veces. Si se asigna un valor a la misma variable en varias marcas --action_env, gana la asignación más reciente.

--experimental_action_listener=label

La opción experimental_action_listener le indica a Bazel que use detalles de la regla action_listener especificada por label para insertar extra_actions en el gráfico de compilación.

--[no]experimental_extra_action_top_level_only

Si esta opción se configura como verdadera, las acciones adicionales especificadas por la opción de línea de comandos --experimental_action_listener solo se programarán para los destinos de nivel superior.

--experimental_extra_action_filter=regex

La opción experimental_extra_action_filter le indica a Bazel que filtre el conjunto de destinos para los que se programa extra_actions.

Esta marca solo se aplica en combinación con la marca --experimental_action_listener.

De forma predeterminada, se programan para su ejecución todas las extra_actions del cierre transitivo de los destinos solicitados para la compilación. --experimental_extra_action_filter restringirá la programación a extra_actions, cuya etiqueta del propietario coincida con la expresión regular especificada.

En el siguiente ejemplo, se limitará la programación de extra_actions para que se aplique solo a acciones en las que la etiqueta del propietario contenga "/bar/":

% bazel build --experimental_action_listener=//test:al //foo/... \
  --experimental_extra_action_filter=.*/bar/.*

--host_cpu=cpu

Esta opción especifica el nombre de la arquitectura de CPU que se debe usar para compilar herramientas de host.

--fat_apk_cpu=cpu[,cpu]*

Las CPU para las que se compilarán bibliotecas C/C++ en el deps transitivo de las reglas android_binary. Las demás reglas de C/C++ no se ven afectadas. Por ejemplo, si una cc_library aparece en el deps transitivo de una regla android_binary y una regla cc_binary, el cc_library se compilará al menos dos veces: una para cada CPU especificada con --fat_apk_cpu para la regla android_binary y una para la CPU especificada con --cpu para la regla cc_binary.

El valor predeterminado es armeabi-v7a.

Se crea y empaqueta un archivo .so en el APK para cada CPU especificada con --fat_apk_cpu. El nombre del archivo .so prefija el nombre de la regla android_binary con “lib”. Por ejemplo, si el nombre de android_binary es "foo", el archivo es libfoo.so.

--per_file_copt=[+-]regex[,[+-]regex]...@option[,option]...

Cuando esté presente, cualquier archivo de C++ con una etiqueta o una ruta de ejecución que coincida con una de las expresiones de regex de inclusión y que no coincida con ninguna de las expresiones de exclusión se compilará con las opciones dadas. La coincidencia de etiquetas usa la forma canónica de la etiqueta (es decir, //package:label_name).

La ruta de ejecución es la ruta relativa al directorio de tu lugar de trabajo, incluido el nombre base (incluida la extensión) del archivo C++. También incluye los prefijos dependientes de la plataforma.

Para hacer coincidir los archivos generados (como los resultados de genrule), Bazel solo puede usar la ruta de ejecución. En este caso, la expresión regular no debería comenzar con “//”, ya que no coincide con ninguna ruta de ejecución. Los nombres de los paquetes se pueden usar de la siguiente manera: --per_file_copt=base/.*\.pb\.cc@-g0. Esto coincidirá con cada archivo .pb.cc de un directorio llamado base.

Esta opción se puede usar varias veces.

La opción se aplica independientemente del modo de compilación que se use. Por ejemplo, es posible compilar con --compilation_mode=opt y compilar de manera selectiva algunos archivos con la optimización más sólida activada o con la optimización inhabilitada.

Caveat: Si algunos archivos se compilan de forma selectiva con símbolos de depuración, es posible que se quiten los símbolos durante la vinculación. Para evitarlo, configura --strip=never.

Sintaxis: [+-]regex[,[+-]regex]...@option[,option]..., en la que regex representa una expresión regular que puede tener el prefijo + para identificar patrones de inclusión y con - para identificar patrones de exclusión. option representa una opción arbitraria que se pasa al compilador de C++. Si una opción contiene un ,, debe estar entre comillas \,. Las opciones también pueden contener @, ya que solo se usa la primera @ para separar las expresiones regulares de las opciones.

Ejemplo: --per_file_copt=//foo:.*\.cc,-//foo:file\.cc@-O0,-fprofile-arcs agrega las opciones -O0 y -fprofile-arcs a la línea de comandos del compilador de C++ para todos los archivos .cc en //foo/, excepto file.cc.

--dynamic_mode=mode

Determina si se vincularán los objetos binarios de C++ de forma dinámica mediante la interacción con el atributo linkstatic en las reglas de compilación.

Modos:

  • auto: Se traduce a un modo que depende de la plataforma; default para linux y off para cygwin.
  • default: Permite que Bazel elija si se debe vincular de forma dinámica. Consulta linkstatic para obtener más información.
  • fully: Vincula todos los destinos de forma dinámica. Esto acelerará el tiempo de vinculación y reducirá el tamaño de los objetos binarios resultantes.
  • off: Vincula todos los destinos en modo mayormente estático. Si se configura -static en linkopt, los destinos cambiarán a completamente estáticos.

--fission (yes|no|[dbg][,opt][,fastbuild])

Habilita Fission, que escribe información de depuración de C++ en archivos .dwo dedicados en lugar de archivos .o, a los que iría de otro modo. Esto reduce considerablemente el tamaño de entrada de los vínculos y puede reducir los tiempos de los vínculos.

Cuando se establece en [dbg][,opt][,fastbuild] (por ejemplo: --fission=dbg,fastbuild), Fission se habilita solo para el conjunto especificado de modos de compilación. Es útil para la configuración de Bazelrc. Cuando se establece en yes, Fission se habilita de manera universal. Cuando se establece en no, Fission se inhabilita de forma universal. La cantidad predeterminada es no.

--force_ignore_dash_static

Si se configura esta marca, se ignorarán las opciones -static en linkopts de los archivos BUILD de reglas cc_*. Esto es solo como una solución alternativa para las compilaciones de endurecimiento de C++.

--[no]force_pic

Si se habilita, todas las compilaciones de C++ producen código independiente de la posición ("-fPIC"), los vínculos prefieren bibliotecas compiladas previamente de PIC en lugar de bibliotecas que no son de PIC, y los vínculos producen ejecutables independientes de la posición ("-pie"). La opción predeterminada está inhabilitada.

--android_resource_shrinking

Selecciona si se deben reducir los recursos para reglas android_binary. Establece el valor predeterminado del atributo reduce_resources en las reglas android_binary. Consulta la documentación de esa regla para obtener más detalles. La configuración predeterminada es desactivada.

--custom_malloc=malloc-library-target

Cuando se especifique, siempre usa la implementación de malloc determinada y anula todos los atributos malloc="target", incluidos los destinos que usan el valor predeterminado (sin especificar ningún malloc).

--crosstool_top=label

Esta opción especifica la ubicación del conjunto de compiladores de herramientas cruzadas que se usará para todas las compilaciones de C++ durante una compilación. Bazel buscará en esa ubicación un archivo CROSSTOOL y lo usará para determinar automáticamente la configuración de --compiler.

--host_crosstool_top=label

Si no se especifica, Bazel usa el valor de --crosstool_top para compilar código en la configuración del host, como las herramientas que se ejecutan durante la compilación. El propósito principal de esta marca es habilitar la compilación cruzada.

--apple_crosstool_top=label

La herramienta cruzada que se usará para compilar reglas C/C++ en el deps transitivo de las reglas objc*, ios* y apple*. Para esos destinos, la marca reemplaza a --crosstool_top.

--android_crosstool_top=label

La herramienta cruzada que se usará para compilar reglas de C/C++ en el deps transitivo de las reglas android_binary. Esto es útil si otros objetivos de la compilación requieren una herramienta cruzada diferente. El valor predeterminado es usar la herramienta cruzada generada por la regla android_ndk_repository en el archivo WORKSPACE. Consulta también --fat_apk_cpu.

--compiler=version

Esta opción especifica la versión del compilador C/C++ (como gcc-4.1.0) que se usará para la compilación de objetos binarios durante la compilación. Si deseas compilar con una herramienta cruzada personalizada, debes usar un archivo CROSSTOOL en lugar de especificar esta marca.

--android_sdk=label

Esta opción especifica el SDK de Android o la cadena de herramientas de la plataforma y la biblioteca de Android Runtime que se usarán para compilar cualquier regla relacionada con Android.

El SDK de Android se seleccionará automáticamente si se define una regla android_sdk_repository en el archivo WORKSPACE.

--java_toolchain=label

Esta opción especifica la etiqueta de java_toolchain que se usa para compilar archivos de origen Java.

--host_java_toolchain=label

Si no se especifica, Bazel usa el valor de --java_toolchain para compilar código en la configuración del host, como para las herramientas que se ejecutan durante la compilación. El propósito principal de esta marca es habilitar la compilación cruzada.

--javabase=(label)

Esta opción configura la etiqueta de la instalación base de Java para usarla en la ejecución de bazel, la prueba de Bazel y los objetos binarios de Java compilados por las reglas java_binary y java_test. Las variables"Make" de JAVABASE y JAVA se derivan de esta opción.

--host_javabase=label

Esta opción establece la etiqueta de la instalación base de Java para usarla en la configuración del host, por ejemplo, para las herramientas de compilación del host, como JavaBuilder y Singlejar.

De esta manera, no se selecciona el compilador de Java que se usa para compilar archivos de origen de Java. El compilador se puede seleccionar configurando la opción --java_toolchain.

Estrategia de ejecución

Estas opciones afectan la forma en que Bazel ejecutará la compilación. No deberían tener ningún efecto significativo en los archivos de salida que genera la compilación. Por lo general, su efecto principal es la velocidad de la compilación.

--spawn_strategy=strategy

Esta opción controla dónde y cómo se ejecutan los comandos.

  • standalone hace que los comandos se ejecuten como subprocesos locales. Este valor está obsoleto. Utilice local en su lugar.
  • sandboxed hace que los comandos se ejecuten dentro de una zona de pruebas en la máquina local. Esto requiere que todos los archivos de entrada, las dependencias de datos y las herramientas se enumeren como dependencias directas en los atributos srcs, data y tools. Bazel habilita la zona de pruebas local de forma predeterminada, en sistemas compatibles con la ejecución de la zona de pruebas.
  • local hace que los comandos se ejecuten como subprocesos locales.
  • worker hace que los comandos se ejecuten con un trabajador persistente (si está disponible).
  • docker hace que los comandos se ejecuten dentro de una zona de pruebas de Docker en la máquina local. Es necesario que Docker esté instalado.
  • remote hace que los comandos se ejecuten de forma remota. Esto solo está disponible si un ejecutor remoto se configuró por separado.

--strategy mnemonic=strategy

Esta opción controla dónde y cómo se ejecutan los comandos, lo que anula --spawn_strategy (y --genrule_strategy con genrule mnemotécnico) por mnemotecnia. Consulta --spawn_strategy para conocer las estrategias compatibles y sus efectos.

--strategy_regexp=<filter,filter,...>=<strategy>

Esta opción especifica qué estrategia se debe usar para ejecutar comandos con descripciones que coincidan con un regex_filter determinado. Consulta --per_file_copt para obtener detalles sobre la coincidencia de regex_filter. Consulta --spawn_strategy para conocer las estrategias compatibles y sus efectos.

Se usará el último regex_filter que coincida con la descripción. Esta opción anula otras marcas para especificar estrategias.

  • Ejemplo: --strategy_regexp=//foo.*\\.cc,-//foo/bar=local significa ejecutar acciones con la estrategia local si sus descripciones coinciden con //foo.*.cc, pero no con //foo/bar.
  • Ejemplo: --strategy_regexp='Compiling.*/bar=local' --strategy_regexp=Compiling=sandboxed ejecuta "Compiling //foo/bar/baz" con la estrategia sandboxed, pero al revertir el orden, se ejecuta con local.
  • Ejemplo: --strategy_regexp='Compiling.*/bar=local,sandboxed' ejecuta "Compila //foo/bar/baz" con la estrategia local y recurre a sandboxed si falla.

--genrule_strategy=strategy

Esta es una abreviatura obsoleta para --strategy=Genrule=strategy.

--jobs=n (-j)

Esta opción, que toma un argumento de número entero, especifica un límite para la cantidad de trabajos que se deben ejecutar de forma simultánea durante la fase de ejecución de la compilación.

--progress_report_interval=n

Bazel imprime de forma periódica un informe de progreso en los trabajos que aún no terminan (como las pruebas de larga duración). Con esta opción, se establece la frecuencia de los informes; el progreso se imprimirá cada n segundos.

El valor predeterminado es 0, lo que significa un algoritmo incremental: el primer informe se imprimirá después de 10 segundos, luego, 30 segundos y, después de ese progreso, se informará una vez por minuto.

Cuando Bazel usa el control del cursor, como lo especifica --curses, el progreso se informa cada segundo.

--local_{ram,cpu}_resources resources or resource expression

Estas opciones especifican la cantidad de recursos locales (RAM en MB y cantidad de núcleos lógicos de CPU) que Bazel puede tener en cuenta cuando programa las actividades de compilación y prueba para que se ejecuten de forma local. Toman un número entero o una palabra clave (HOST_RAM o HOST_CPUS) opcionalmente seguida de [-|*float] (por ejemplo, --local_cpu_resources=2, --local_ram_resources=HOST_RAM*.5, --local_cpu_resources=HOST_CPUS-1). Las marcas son independientes; se pueden establecer una o ambas. De forma predeterminada, Bazel estima la cantidad de RAM y la cantidad de núcleos de CPU directamente a partir de la configuración del sistema local.

Esta opción, que está habilitada de forma predeterminada, especifica si los symlinks de archivos de ejecución para pruebas y objetos binarios se deben compilar en el directorio de salida. Usar --nobuild_runfile_links puede ser útil para validar si todos los destinos se compilan sin incurrir en la sobrecarga que se genera cuando se compilan los árboles de archivos de ejecución.

Cuando se ejecutan pruebas (o aplicaciones), sus dependencias de datos de tiempo de ejecución se reúnen en un solo lugar. Dentro del árbol de resultados de Bazel, este árbol “runfiles” suele tener sus raíces como un elemento del mismo nivel del objeto binario o la prueba correspondiente. Durante la ejecución de prueba, se puede acceder a los archivos de ejecución a través de rutas con el formato $TEST_SRCDIR/workspace/packagename/filename. El árbol de archivos de ejecución garantiza que las pruebas tengan acceso a todos los archivos de los que tienen una dependencia declarada, y nada más. De forma predeterminada, el árbol de archivos de ejecución se implementa mediante la construcción de un conjunto de vínculos simbólicos a los archivos requeridos. A medida que crece el conjunto de vínculos, también aumenta el costo de esta operación. En el caso de algunas compilaciones grandes, puede contribuir de manera significativa al tiempo de compilación general, en particular porque cada prueba (o aplicación) individual requiere su propio árbol de archivos de ejecución.

--[no]build_runfile_manifests

Esta opción, que está habilitada de forma predeterminada, especifica si los manifiestos de runfiles se deben escribir en el árbol de resultados. Si la inhabilitas, se implica --nobuild_runfile_links.

Se puede inhabilitar cuando se ejecutan pruebas de forma remota, ya que los árboles de archivos de ejecución se crearán de forma remota desde los manifiestos en la memoria.

--[no]discard_analysis_cache

Cuando esta opción está habilitada, Bazel descartará la caché de análisis justo antes de que comience la ejecución, lo que liberará memoria adicional (alrededor del 10%) para la fase de ejecución. La desventaja es que las compilaciones incrementales adicionales serán más lentas. Consulta también el modo de ahorro de memoria.

--[no]keep_going (-k)

Al igual que en GNU Make, la fase de ejecución de una compilación se detiene cuando se encuentra el primer error. A veces, es útil tratar de compilar lo más posible, incluso cuando hay errores. Esta opción habilita ese comportamiento y, cuando se especifica, la compilación intentará compilar todos los destinos cuyos requisitos previos se hayan compilado correctamente, pero ignorará los errores.

Si bien esta opción suele estar asociada con la fase de ejecución de una compilación, también afecta la fase de análisis: si se especifican varios destinos en un comando de compilación, pero solo algunos de ellos pueden analizarse con éxito, la compilación se detendrá con un error a menos que se especifique --keep_going, en cuyo caso la compilación pasará a la fase de ejecución, pero solo se analizará para los destinos que se analizaron con éxito.

--[no]use_ijars

Esta opción cambia la forma en que Bazel compila los destinos de java_library. En lugar de usar el resultado de un java_library para compilar objetivos java_library dependientes, Bazel creará archivos jar de interfaz que contendrán solo las firmas de los miembros no privados (métodos y campos de acceso públicos, protegidos y predeterminados (de paquetes) y usará los archivos jar de la interfaz para compilar los objetivos dependientes. Esto permite evitar la recompilación cuando los cambios solo se realizan en cuerpos de métodos o miembros privados de una clase.

--[no]interface_shared_objects

Esta opción habilita los objetos compartidos de interfaz, lo que hace que los objetos binarios y otras bibliotecas compartidas dependan de la interfaz de un objeto compartido, en lugar de su implementación. Cuando solo cambia la implementación, Bazel puede evitar volver a compilar destinos que dependen innecesariamente de la biblioteca compartida modificada.

Selección de salida

Estas opciones determinan qué compilar o probar.

--[no]build

Esta opción provoca la fase de ejecución de la compilación. Está activada de forma predeterminada. Cuando está apagado, se omite la fase de ejecución y solo se producen las dos primeras fases (carga y análisis).

Esta opción puede ser útil para validar archivos BUILD y detectar errores en las entradas, sin compilar nada.

--[no]build_tests_only

Si se especifica, Bazel compilará solo lo necesario para ejecutar las reglas *_test y test_suite que no se filtraron debido a su tamaño, tiempo de espera, etiqueta o idioma. Si se especifica, Bazel ignorará otros destinos especificados en la línea de comandos. De forma predeterminada, esta opción está inhabilitada y Bazel compilará todo lo solicitado, incluidas las reglas *_test y test_suite que se filtran de las pruebas. Esto resulta útil, ya que ejecutar bazel test --build_tests_only foo/... podría no detectar todas las fallas de compilación en el árbol foo.

--[no]check_up_to_date

Esta opción hace que Bazel no realice una compilación, sino que solo verifica si todos los destinos especificados están actualizados. Si es así, la compilación se completará correctamente, como de costumbre. Sin embargo, si algún archivo está desactualizado, en lugar de compilarse, se informa un error y la compilación falla. Esta opción puede ser útil para determinar si una compilación se realizó más recientemente que una edición de origen (por ejemplo, para verificaciones previas al envío) sin incurrir en el costo de una compilación.

Consulta también --check_tests_up_to_date.

--[no]compile_one_dependency

Compila una sola dependencia de los archivos de argumentos. Esto es útil para verificar la sintaxis de los archivos de origen en IDE, por ejemplo, mediante la recompilación de un solo destino que depende del archivo de origen para detectar errores lo antes posible en el ciclo de edición, compilación o prueba. Este argumento afecta la forma en que se interpretan todos los argumentos que no son marcas: cada argumento debe ser una etiqueta de destino de archivo o un nombre de archivo sin formato relativo al directorio de trabajo actual, y se crea una regla que depende de cada nombre de archivo de origen. Para

Los códigos fuente C++ y Java, se prefieren las reglas en el mismo espacio de lenguaje. Si hay varias reglas con la misma preferencia, se elige la que aparece primero en el archivo BUILD. Un patrón de destino llamado explícitamente que no hace referencia a un archivo de origen genera un error.

--save_temps

La opción --save_temps hace que se guarden los resultados temporales del compilador. Estos incluyen archivos .s (código ensamblador), .i (C preprocesado) y .ii (C++ previamente procesados). Estos resultados suelen ser útiles para la depuración. Solo se generarán las temperaturas para el conjunto de objetivos especificados en la línea de comandos.

Actualmente, la marca --save_temps solo funciona para reglas cc_*.

Para asegurarte de que Bazel imprima la ubicación de los archivos de salida adicionales, verifica que la configuración de --show_result n sea lo suficientemente alta.

--build_tag_filters=tag[,tag]*

Si se especifica, Bazel solo compilará destinos que tengan al menos una etiqueta obligatoria (si se especifica alguna de ellas) y no tenga etiquetas excluidas. El filtro de la etiqueta de compilación se especifica como una lista delimitada por comas de palabras clave de etiquetas, que puede ir precedida de forma opcional por el signo “-” para indicar las etiquetas excluidas. Las etiquetas obligatorias también pueden tener precedido por un signo "+".

Cuando se ejecutan pruebas, Bazel ignora --build_tag_filters para los destinos de prueba, que se compilan y ejecutan incluso si no coinciden con este filtro. Para evitar compilarlos, filtra los destinos de prueba con --test_tag_filters o exclúyelos de manera explícita.

--test_size_filters=size[,size]*

Si se especifica, Bazel probará (o compilará si también se especifica --build_tests_only) solo probará destinos con el tamaño determinado. El filtro de tamaño de prueba se especifica como una lista delimitada por comas de valores de tamaño de prueba permitidos (pequeño, mediano, grande o enorme), precedido de manera opcional por el signo "-" para denotar los tamaños de prueba excluidos. Por ejemplo,

  % bazel test --test_size_filters=small,medium //foo:all
y
  % bazel test --test_size_filters=-large,-enormous //foo:all

solo probará pruebas pequeñas y medianas en //foo.

De forma predeterminada, no se aplica el filtro de tamaño de prueba.

--test_timeout_filters=timeout[,timeout]*

Si se especifica, Bazel probará (o compilará si también se especifica --build_tests_only) solo probará destinos con el tiempo de espera determinado. El filtro de tiempo de espera de prueba se especifica como una lista delimitada por comas de valores de tiempo de espera de prueba permitidos (corto, moderado, largo o eterno), opcionalmente precedido por el signo “-” para denotar los tiempos de espera de prueba excluidos. Consulta --test_size_filters para ver la sintaxis de ejemplo.

De forma predeterminada, no se aplica el filtro de tiempo de espera de la prueba.

--test_tag_filters=tag[,tag]*

Si se especifica, Bazel probará (o compilará si también se especifica --build_tests_only) solo probará destinos que tengan al menos una etiqueta obligatoria (si se especifica alguna) y no tendrá ninguna etiqueta excluida. El filtro de la etiqueta de prueba se especifica como una lista delimitada por comas de palabras clave de etiquetas, con el signo “-” que se usa de manera opcional para indicar las etiquetas excluidas. Las etiquetas obligatorias también pueden tener precedido por un signo "+".

Por ejemplo,

  % bazel test --test_tag_filters=performance,stress,-flaky //myproject:all

Probará los destinos que estén etiquetados con las etiquetas performance o stress, pero no con la etiqueta flaky.

De forma predeterminada, no se aplica el filtrado de etiquetas de prueba. Ten en cuenta que también puedes filtrar las etiquetas size y local de la prueba de esta manera.

--test_lang_filters=lang[,lang]*

Especifica una lista separada por comas de idiomas de prueba para idiomas con una regla oficial de *_test (consulta la enciclopedia de compilación para obtener una lista completa de estas). Cada idioma puede estar precedido de manera opcional por “-” para especificar los idiomas excluidos. El nombre que se usa para cada idioma debe ser el mismo que el prefijo de idioma de la regla *_test, por ejemplo, cc, java o sh.

Si se especifica, Bazel probará (o compilará si también se especifica --build_tests_only) solo probará destinos de los idiomas especificados.

Por ejemplo,

  % bazel test --test_lang_filters=cc,java foo/...

solo probará las pruebas C/C++ y Java (definidas con las reglas cc_test y java_test, respectivamente) en foo/..., mientras que

  % bazel test --test_lang_filters=-sh,-java foo/...

Se ejecutarán todas las pruebas de foo/..., excepto las pruebas sh_test y java_test.

De forma predeterminada, no se aplica el filtro de idioma de la prueba.

--test_filter=filter-expression

Especifica un filtro que el ejecutor de pruebas puede usar para seleccionar un subconjunto de pruebas para su ejecución. Se compilan todos los destinos especificados en la invocación, pero, según la expresión, solo se pueden ejecutar algunos de ellos. En algunos casos, solo se ejecutan ciertos métodos de prueba.

La interpretación particular de filter-expression depende del framework de pruebas responsable de ejecutar la prueba. Puede ser un glob, una substring o una regexp. --test_filter resulta conveniente en lugar de pasar diferentes argumentos de filtro --test_arg, pero no todos los frameworks lo admiten.

Verbosidad

Estas opciones controlan la verbosidad de la salida de Bazel, ya sea en la terminal o en archivos de registro adicionales.

--explain=logfile

Esta opción, que requiere un argumento de nombre de archivo, hace que el verificador de dependencias en la fase de ejecución de bazel build explique, para cada paso de compilación, por qué se está ejecutando o si está actualizado. La explicación se escribe en logfile.

Si te encuentras con recompilaciones inesperadas, esta opción puede ayudarte a comprender el motivo. Agrégalo a tu .bazelrc para que se registren todas las compilaciones posteriores y, luego, inspecciona el registro cuando veas que un paso de ejecución se ejecutó de forma inesperada. Esta opción puede conllevar una pequeña penalización de rendimiento, por lo que te recomendamos quitarla cuando ya no sea necesaria.

--verbose_explanations

Esta opción aumenta la verbosidad de las explicaciones que se generan cuando la opción --explain está habilitada.

En particular, si se habilitan las explicaciones detalladas y se vuelve a compilar un archivo de salida porque cambió el comando utilizado para compilarlo, el resultado del archivo de explicación incluirá los detalles completos del comando nuevo (al menos para la mayoría de los comandos).

Usar esta opción puede aumentar significativamente la longitud del archivo de explicación generado y la penalidad de rendimiento que conlleva usar --explain.

Si --explain no está habilitado, --verbose_explanations no tiene efecto.

--profile=file

Esta opción, que tiene un argumento de nombre de archivo, hace que Bazel escriba datos de generación de perfiles en un archivo. Los datos se pueden analizar con el comando bazel analyze-profile. El perfil de compilación puede ser útil para comprender en qué parte del tiempo el comando build de Bazel pasa su tiempo.

--[no]show_loading_progress

Esta opción hace que Bazel genere mensajes de progreso de carga del paquete. Si la inhabilitas, no se mostrarán los mensajes.

--[no]show_progress

Esta opción hace que se muestren mensajes de progreso; está activada de forma predeterminada. Cuando se inhabilita, se suprimen los mensajes de progreso.

--show_progress_rate_limit=n

Esta opción hace que Bazel muestre, como máximo, un mensaje de progreso cada n segundos, en que n es un número real. El valor predeterminado para esta opción es 0.02, lo que significa que Bazel limitará los mensajes de progreso a uno cada 0.02 segundos.

--show_result=n

Esta opción controla la impresión de información de los resultados al final de un comando bazel build. De forma predeterminada, si se especificó un solo destino de compilación, Bazel imprime un mensaje que indica si el destino se actualizó de forma correcta y, de ser así, la lista de archivos de salida que creó el destino. Si se especificaron varios objetivos, no se muestra la información de los resultados.

Si bien la información de los resultados puede ser útil para compilaciones de un solo objetivo o de algunos objetivos, en compilaciones grandes (como un árbol de proyecto de nivel superior completo), esta información puede ser abrumadora y distraer. Esta opción permite controlarla. --show_result acepta un argumento de número entero, que es la cantidad máxima de objetivos para los que se debe imprimir la información completa del resultado. De forma predeterminada, el valor es 1. Por encima de este umbral, no se muestra información de resultados para objetivos individuales. Por lo tanto, cero hace que la información del resultado se suprima siempre y un valor muy grande hace que el resultado se imprima siempre.

Es posible que los usuarios quieran elegir un valor intermedio si alternan con frecuencia entre la compilación de un grupo pequeño de destinos (por ejemplo, durante el ciclo de compilación, edición y prueba) y un grupo grande de destinos (por ejemplo, cuando establecen un lugar de trabajo nuevo o ejecutan pruebas de regresión). En el primer caso, la información de los resultados es muy útil, mientras que en el último, no lo es. Al igual que con todas las opciones, esto se puede especificar implícitamente a través del archivo .bazelrc.

Los archivos se imprimen para facilitar la copia y el pegado del nombre del archivo en la shell a fin de ejecutar ejecutables compilados. Las secuencias de comandos que impulsan una compilación pueden analizar con facilidad los mensajes “actualizados” o “con errores” para cada destino.

--sandbox_debug

Esta opción hace que Bazel imprima información de depuración adicional cuando se use la zona de pruebas para ejecutar las acciones. Esta opción también conserva los directorios de la zona de pruebas, de modo que se puedan examinar los archivos visibles para las acciones durante la ejecución.

--subcommands (-s)

Esta opción hace que la fase de ejecución de Bazel imprima la línea de comandos completa para cada comando antes de ejecutarlo.

  >>>>> # //examples/cpp:hello-world [action 'Linking examples/cpp/hello-world']
  (cd /home/johndoe/.cache/bazel/_bazel_johndoe/4c084335afceb392cfbe7c31afee3a9f/bazel && \
    exec env - \
    /usr/bin/gcc -o bazel-out/local-fastbuild/bin/examples/cpp/hello-world -B/usr/bin/ -Wl,-z,relro,-z,now -no-canonical-prefixes -pass-exit-codes -Wl,-S -Wl,@bazel-out/local_linux-fastbuild/bin/examples/cpp/hello-world-2.params)

Cuando es posible, los comandos se imprimen en una sintaxis compatible de shell Bourne para que se puedan copiar y pegar con facilidad en un símbolo del sistema de shell. (Se proporcionan los paréntesis circundantes para proteger tu shell de las llamadas cd y exec; asegúrate de copiarlos). Sin embargo, algunos comandos se implementan de forma interna dentro de Bazel, como la creación de árboles de symlinks. Para estos casos, no hay línea de comandos para mostrar.

Se puede pasar --subcommands=pretty_print para imprimir los argumentos del comando como una lista en lugar de como una sola línea. Esto puede ayudar a que las líneas de comandos largas sean más legibles.

Consulta también --verbose_failures a continuación.

Para registrar subcomandos en un archivo en un formato compatible con las herramientas, consulta --execution_log_json_file y --execution_log_binary_file.

--verbose_failures

Esta opción hace que la fase de ejecución de Bazel imprima la línea de comandos completa para los comandos que fallaron. Esto puede ser muy útil para depurar una compilación con errores.

Los comandos con errores se imprimen en una sintaxis compatible de shell Bourne, adecuada para copiar y pegar en un mensaje de shell.

Estado del lugar de trabajo

Usa estas opciones para “marcar” objetos binarios compilados en Bazel: incorpora información adicional en los objetos binarios, como la revisión de control de fuente y otra información relacionada con el lugar de trabajo. Puedes usar este mecanismo con reglas que admitan el atributo stamp, como genrule y cc_binary, entre otras.

--workspace_status_command=program

Esta marca te permite especificar un objeto binario que Bazel ejecuta antes de cada compilación. El programa puede brindar información sobre el estado del lugar de trabajo, como la revisión actual del control de fuente.

El valor de la marca debe ser una ruta de acceso a un programa nativo. En Linux o macOS, puede ser cualquier archivo ejecutable. En Windows, debe ser un objeto binario nativo, generalmente un archivo ".exe", ".bat" o ".cmd".

El programa debe imprimir cero o más pares clave-valor en el resultado estándar, una entrada en cada línea y, luego, salir con cero (de lo contrario, la compilación falla). Los nombres de las claves pueden ser cualquier cosa, pero solo pueden usar letras mayúsculas y guiones bajos. El primer espacio después del nombre de la clave la separa del valor. El valor es el resto de la línea (incluidos los espacios en blanco adicionales). Ni la clave ni el valor pueden abarcar varias líneas. Las claves no deben estar duplicadas.

Bazel divide las claves en dos buckets: “estable” y “volátil”. (Los nombres "estable" y "volátil" son un poco contradictorios, así que no pienses mucho en ellos).

Luego, Bazel escribe los pares clave-valor en dos archivos:

  • bazel-out/stable-status.txt contiene todas las claves y los valores en los que el nombre de la clave comienza con STABLE_.
  • bazel-out/volatile-status.txt contiene el resto de las claves y sus valores.

El contrato es el siguiente:

  • Si es posible, los valores de claves “estable” deberían cambiar con poca frecuencia. Si cambia el contenido de bazel-out/stable-status.txt, Bazel invalida las acciones que dependen de ellos. En otras palabras, si cambia el valor de una clave estable, Bazel volverá a ejecutar las acciones selladas. Por lo tanto, el estado estable no debería contener elementos como marcas de tiempo, ya que cambian todo el tiempo y harían que Bazel vuelva a ejecutar las acciones selladas con cada compilación.

    Bazel siempre genera las siguientes claves estables:

    • BUILD_EMBED_LABEL: valor de --embed_label
    • BUILD_HOST: Es el nombre de la máquina anfitrión en la que se ejecuta Bazel.
    • BUILD_USER: Es el nombre del usuario que ejecuta Bazel.
  • Los valores de las claves “volatiles” pueden cambiar con frecuencia. Bazel espera que cambien todo el tiempo, como lo hacen las marcas de tiempo, y actualiza el archivo bazel-out/volatile-status.txt debidamente. Sin embargo, para evitar volver a ejecutar las acciones selladas todo el tiempo, Bazel simula que el archivo volátil nunca cambia. En otras palabras, si el archivo de estado volátil es el único cuyo contenido cambió, Bazel no invalidará las acciones que dependan de él. Si cambiaron otras entradas de las acciones, Bazel vuelve a ejecutar esa acción, y esta verá el estado volátil actualizado, pero solo el cambio de estado volátil por sí solo no invalidará la acción.

    Bazel siempre genera las siguientes claves volátiles:

    • BUILD_TIMESTAMP: Tiempo de la compilación en segundos desde la época Unix (el valor de System.currentTimeMillis() dividido por mil)

En Linux o macOS, puedes pasar --workspace_status_command=/bin/true para inhabilitar la recuperación del estado del lugar de trabajo, ya que true no hace nada, de forma correcta (sale con cero) y no imprime ningún resultado. En Windows, puedes pasar la ruta de acceso del true.exe de MSYS para obtener el mismo efecto.

Si, por algún motivo, el comando de estado del lugar de trabajo falla (no es cero) por algún motivo, la compilación fallará.

Programa de ejemplo en Linux con Git:

#!/bin/bash
echo "CURRENT_TIME $(date +%s)"
echo "RANDOM_HASH $(cat /proc/sys/kernel/random/uuid)"
echo "STABLE_GIT_COMMIT $(git rev-parse HEAD)"
echo "STABLE_USER_NAME $USER"

Pasa la ruta de acceso de este programa con --workspace_status_command; el archivo de estado estable incluirá las líneas STABLE y el archivo de estado volátil incluirá el resto de las líneas.

--[no]stamp

Esta opción, junto con el atributo de regla stamp, controla si se debe incorporar información de compilación en objetos binarios.

El sello se puede habilitar o inhabilitar de forma explícita por regla con el atributo stamp. Para obtener más información, consulta la Enciclopedia de Compilación. Cuando una regla establece stamp = -1 (el valor predeterminado para reglas *_binary), esta opción determina si el sello está habilitado.

Bazel nunca sella los objetos binarios que se compilan para la configuración del host, sin importar esta opción ni el atributo stamp. En las reglas que establecen stamp = 0 (la opción predeterminada para las reglas *_test), el sello está inhabilitado sin importar --[no]stamp. Especificar --stamp no fuerza la recompilación de los destinos si sus dependencias no cambiaron.

Por lo general, se recomienda configurar --nostamp para el rendimiento de la compilación, ya que reduce la volatilidad de entrada y maximiza el almacenamiento en caché de la compilación.

Plataforma

Usa estas opciones para controlar las plataformas host y de destino que configuran el funcionamiento de las compilaciones, y para controlar qué plataformas de ejecución y cadenas de herramientas están disponibles para las reglas de Bazel.

Obtén información general sobre plataformas y cadenas de herramientas.

--platforms=labels

Las etiquetas de las reglas de la plataforma que describen las plataformas de destino del comando actual.

--host_platform=label

La etiqueta de una regla de plataforma que describe el sistema host.

--extra_execution_platforms=labels

Las plataformas que están disponibles como plataformas de ejecución para ejecutar acciones. Las plataformas se pueden especificar por objetivo exacto o como patrón de objetivo. Estas plataformas se considerarán antes que las declaradas en el archivo WORKSPACE por register_execution_platforms().

--extra_toolchains=labels

Las reglas de la cadena de herramientas que se tendrán en cuenta durante la resolución de la cadena de herramientas. Las cadenas de herramientas se pueden especificar por objetivo exacto o como patrón de objetivo. Estas cadenas de herramientas se tendrán en cuenta antes que las declaradas en el archivo WORKSPACE por register_toolchains().

--toolchain_resolution_debug=regex

Imprime información de depuración mientras encuentras cadenas de herramientas si su tipo coincide con la regex. Si hay varias regex, se pueden separar con comas. La regex se puede negar usando un - al comienzo. Esto podría ayudar a los desarrolladores de reglas de Bazel o Starlark con fallas de depuración debido a la falta de cadenas de herramientas.

Varios

--flag_alias=alias_name=target_path

Marca de conveniencia que se usa para vincular configuraciones de compilación de Starlark más largas a un nombre más corto. Para obtener más detalles, consulta la configuración de Starlark.

Cambia el prefijo de los symlinks de conveniencia generados. El valor predeterminado para el prefijo del symlink es bazel-, que creará los symlinks bazel-bin, bazel-testlogs y bazel-genfiles.

Si por algún motivo no se pueden crear los vínculos simbólicos, se emite una advertencia, pero la compilación se considera exitosa de todos modos. En particular, esto te permite compilar en un directorio de solo lectura o en uno en el que no tienes permiso para escribir. Cualquier ruta de acceso impresa en los mensajes informativos al final de una compilación solo usará la forma corta relativa de los symlinks si apuntan a la ubicación esperada; en otras palabras, puedes confiar en la precisión de esas rutas, incluso si no puedes confiar en los symlinks que se crean.

Estos son algunos valores comunes para esta opción:

  • Suprime la creación de symlinks: --symlink_prefix=/ hará que Bazel no cree ni actualice ningún symlink, incluidos los symlinks bazel-out y bazel-<workspace>. Usa esta opción para suprimir por completo la creación de symlinks.

  • Reduce el desorden: --symlink_prefix=.bazel/ hará que Bazel cree symlinks llamados bin (etc.) dentro de un directorio oculto .bazel.

--platform_suffix=string

Agrega un sufijo al nombre corto de la configuración, que se usa para determinar el directorio de salida. Si configuras esta opción en valores diferentes, se colocarán los archivos en directorios diferentes; por ejemplo, para mejorar las tasas de aciertos de caché en las compilaciones que, de lo contrario, generarían archivos de salida entre sí o conservar los archivos de salida para realizar comparaciones.

--default_visibility=(private|public)

Marca temporal para probar los cambios de visibilidad predeterminada de Bazel. No está diseñada para uso general, pero se documenta para ofrecer una integridad.

--[no]use_action_cache

Esta opción está habilitada de forma predeterminada. Si se inhabilita, Bazel no usará su caché de acciones locales. Inhabilitar la caché de acciones locales ahorra memoria y espacio en disco para compilaciones limpias, pero hará que las compilaciones incrementales sean más lentas.

--starlark_cpu_profile=_file_

Esta marca, cuyo valor es el nombre de un archivo, hace que Bazel recopile estadísticas sobre el uso de CPU de todos los subprocesos de Starlark y escriba el perfil en formato pprof en el archivo nombrado.

Usa esta opción para identificar las funciones de Starlark que hacen que la carga y el análisis sean lentos debido a un procesamiento excesivo. Por ejemplo:

$ bazel build --nobuild --starlark_cpu_profile=/tmp/pprof.gz my/project/...
$ pprof /tmp/pprof.gz
(pprof) top
Type: CPU
Time: Feb 6, 2020 at 12:06pm (PST)
Duration: 5.26s, Total samples = 3.34s (63.55%)
Showing nodes accounting for 3.34s, 100% of 3.34s total
      flat  flat%   sum%        cum   cum%
     1.86s 55.69% 55.69%      1.86s 55.69%  sort_source_files
     1.02s 30.54% 86.23%      1.02s 30.54%  expand_all_combinations
     0.44s 13.17% 99.40%      0.44s 13.17%  range
     0.02s   0.6%   100%      3.34s   100%  sorted
         0     0%   100%      1.38s 41.32%  my/project/main/BUILD
         0     0%   100%      1.96s 58.68%  my/project/library.bzl
         0     0%   100%      3.34s   100%  main

Para obtener diferentes vistas de los mismos datos, prueba los comandos de pprof svg, web y list.

Usa Bazel para versiones

Los ingenieros de software usan Bazel durante el ciclo de desarrollo y los ingenieros de lanzamientos cuando preparan los objetos binarios para implementar en producción. En esta sección, se proporciona una lista de sugerencias para ingenieros de lanzamientos que usan Bazel.

Opciones importantes

Cuando se usa Bazel para compilaciones de lanzamiento, surgen los mismos problemas que para otras secuencias de comandos que realizan una compilación. Para obtener más detalles, consulta Cómo llamar a Bazel desde secuencias de comandos. En particular, te recomendamos que uses las siguientes opciones:

Estas opciones también son importantes:

  • --package_path
  • --symlink_prefix: Para administrar compilaciones para varias configuraciones, puede ser conveniente distinguir cada compilación con un identificador distinto, como "64 bits" frente a "32 bits". Con esta opción, se diferencian los symlinks bazel-bin (etc.).

Cómo ejecutar pruebas

Para compilar y ejecutar pruebas con Bazel, escribe bazel test seguido del nombre de los destinos de prueba.

De forma predeterminada, este comando realiza actividades de compilación y prueba simultáneas, compila todos los destinos especificados (incluidos los que no son de prueba especificados en la línea de comandos) y prueba los objetivos *_test y test_suite apenas se compilan sus requisitos previos, lo que significa que la ejecución de prueba se intercala con la compilación. Hacerlo suele generar mejoras significativas de velocidad.

Opciones para bazel test

--cache_test_results=(yes|no|auto) (-t)

Si esta opción se configura como “auto” (predeterminado), Bazel solo volverá a ejecutar una prueba en caso de que se aplique alguna de las siguientes condiciones:

  • Bazel detecta cambios en la prueba o sus dependencias.
  • la prueba se marca como external.
  • se solicitaron varias ejecuciones de prueba con --runs_per_test
  • la prueba falló.

Si es “no”, todas las pruebas se ejecutarán de manera incondicional.

Si la respuesta es “sí”, el comportamiento del almacenamiento en caché será el mismo que el de automático, excepto que puede almacenar en caché las pruebas fallidas y las ejecuciones de prueba con --runs_per_test.

Los usuarios que habilitaron esta opción de forma predeterminada en su archivo .bazelrc pueden encontrar las abreviaturas -t (activado) o -t- (desactivado) para anular el valor predeterminado en una ejecución en particular.

--check_tests_up_to_date

Esta opción le indica a Bazel que no ejecute las pruebas, sino que solo verifique e informe los resultados de la prueba almacenados en caché. Si hay pruebas que no se compilaron ni se ejecutaron anteriormente, o cuyos resultados están desactualizados (por ejemplo, porque cambiaron el código fuente o las opciones de compilación), Bazel informará un mensaje de error ("el resultado de la prueba no está actualizado"), registrará el estado de la prueba como "SIN ESTADO" (en rojo, si el resultado en color está habilitado) y mostrará un código de salida distinto de cero.

Esta opción también implica el comportamiento de [--check_up_to_date](#check-up-to-date).

Esta opción puede ser útil para las verificaciones previas al envío.

--test_verbose_timeout_warnings

Esta opción le indica a Bazel que advierta al usuario de forma explícita si el tiempo de espera de una prueba es mucho más largo que el tiempo de ejecución real de la prueba. Si bien el tiempo de espera de una prueba debe configurarse de modo que no sea inestable, una prueba que tiene un tiempo de espera muy generoso puede ocultar los problemas reales que surgen de forma inesperada.

Por ejemplo, una prueba que normalmente se ejecuta en uno o dos minutos no debería tener un tiempo de espera ETERNAL o LONG, ya que estos valores son demasiado generosos.

Esta opción es útil para ayudar a los usuarios a decidir un buen valor de tiempo de espera o a verificar el estado de los valores de tiempo de espera existentes.

--[no]test_keep_going

De forma predeterminada, todas las pruebas se ejecutan hasta su finalización. Sin embargo, si esta marca está inhabilitada, se anula la compilación en cualquier prueba que no se haya aprobado. No se ejecutan los pasos de compilación ni las invocaciones de prueba posteriores, y se cancelan las invocaciones en tránsito. No especifiques --notest_keep_going ni --keep_going.

--flaky_test_attempts=attempts

Esta opción especifica la cantidad máxima de veces que se debe intentar una prueba si falla por algún motivo. Una prueba que falla en un principio, pero que al final tiene éxito, se informa como FLAKY en el resumen de la prueba. Sin embargo, se considera que está aprobada cuando se trata de identificar el código de salida de Bazel o la cantidad total de pruebas aprobadas. Las pruebas en las que fallan todos los intentos permitidos se consideran fallidas.

De forma predeterminada (cuando no se especifica esta opción o se establece como predeterminada), se permite un solo intento para las pruebas regulares y 3 para las reglas de prueba con el atributo flaky configurado. Puedes especificar un número entero para anular el límite máximo de intentos de prueba. Bazel permite un máximo de 10 intentos de prueba para evitar el abuso del sistema.

--runs_per_test=[regex@]number

Esta opción especifica la cantidad de veces que se debe ejecutar cada prueba. Todas las ejecuciones de prueba se tratan como pruebas independientes (la funcionalidad de resguardo se aplicará a cada una de ellas de forma independiente).

El estado de un destino con ejecuciones con errores depende del valor de la marca --runs_per_test_detects_flakes:

  • Si está ausente, cualquier ejecución con errores hará que falle toda la prueba.
  • Si está presente y dos ejecuciones de la misma devolución de fragmento APROBADA y ERROR, la prueba recibirá un estado inestable (a menos que otras ejecuciones con errores lo provoquen).

Si se especifica un solo número, todas las pruebas se ejecutarán esa misma cantidad de veces. Como alternativa, una expresión regular se puede especificar mediante la sintaxis regex@number. Esto restringe el efecto de --runs_per_test a los objetivos que coinciden con la regex (--runs_per_test=^//pizza:.*@4 ejecuta todas las pruebas en //pizza/ 4 veces). Esta forma de --runs_per_test se puede especificar más de una vez.

--[no]runs_per_test_detects_flakes

Si se especifica esta opción (de forma predeterminada no lo está), Bazel detectará fragmentos de prueba inestables a través de --runs_per_test. Si una o más ejecuciones de un solo fragmento fallan y una o más ejecuciones para el mismo pase de fragmento, el destino se considerará inestable con la marca. Si no se especifica, el destino informará un estado de falla.

--test_summary=output_style

Especifica cómo se debe mostrar el resumen de los resultados de la prueba.

  • short imprime los resultados de cada prueba junto con el nombre del archivo que contiene el resultado de la prueba si esta falló. Este es el valor predeterminado.
  • terse como short, pero incluso más corto: Solo imprime información sobre las pruebas que no fueron exitosas.
  • detailed imprime cada caso de prueba individual que falló, no solo cada prueba. Se omiten los nombres de los archivos de salida de prueba.
  • none no imprime el resumen de la prueba.

--test_output=output_style

Especifica cómo se debe mostrar el resultado de la prueba:

  • summary muestra un resumen de si cada prueba se aprobó o falló. También muestra el nombre del archivo de registro de salida para las pruebas fallidas. El resumen se imprimirá al final de la compilación (durante la compilación, solo se verán mensajes de progreso simples cuando las pruebas se inicien, se aprueben o fallen). Este es el comportamiento predeterminado.
  • errors envía el resultado combinado de stdout/stderr de las pruebas fallidas solo al stdout inmediatamente después de que se completa la prueba, lo que garantiza que los resultados de las pruebas simultáneas no se intercalan entre sí. Imprime un resumen en la compilación según el resultado del resumen anterior.
  • all es similar a errors, pero imprime el resultado de todas las pruebas, incluidas las que se aprobaron.
  • streamed transmite el resultado de stdout/stderr de cada prueba en tiempo real.

--java_debug

Esta opción hace que la máquina virtual de Java de una prueba de Java espere una conexión de un depurador compatible con JDWP antes de comenzar la prueba. Esta opción implica --test_output=streamed.

--[no]verbose_test_summary

Esta opción está habilitada de forma predeterminada, lo que hace que los tiempos de prueba y otra información adicional (como los intentos de prueba) se impriman en el resumen de la prueba. Si se especifica --noverbose_test_summary, el resumen de la prueba solo incluirá el nombre de la prueba, el estado de la prueba y el indicador de prueba almacenado en caché, y se tendrá un formato que no superará los 80 caracteres siempre que sea posible.

--test_tmpdir=path

Especifica el directorio temporal para las pruebas que se ejecutan de manera local. Cada prueba se ejecutará en un subdirectorio separado dentro de este directorio. El directorio se limpiará al comienzo de cada comando bazel test. De forma predeterminada, Bazel colocará este directorio en el directorio base de salida de Bazel.

--test_timeout=seconds O --test_timeout=seconds,seconds,seconds,seconds

Anula el valor de tiempo de espera para todas las pruebas mediante el uso de una cantidad específica de segundos como un valor de tiempo de espera nuevo. Si solo se proporciona un valor, se usará para todas las categorías de tiempo de espera de la prueba.

Como alternativa, se pueden proporcionar cuatro valores separados por comas, que especifican los tiempos de espera individuales para pruebas cortas, moderadas, largas y eternas (en ese orden). En cualquier forma, el tiempo de espera predeterminado de cualquiera de los tamaños de prueba se sustituirá por cero o por un valor negativo para las categorías de tiempo de espera proporcionadas, tal como se define en la página Escritura de pruebas. De forma predeterminada, Bazel usará estos tiempos de espera para todas las pruebas. Para ello, deducirá el límite a partir del tamaño de la prueba, sin importar si el tamaño está configurado de forma implícita o explícita.

Las pruebas que indican de manera explícita que su categoría de tiempo de espera es distinta de su tamaño, recibirán el mismo valor que si la etiqueta de tamaño hubiera establecido implícitamente el tiempo de espera. Por lo tanto, una prueba de tamaño "pequeño" que declara un tiempo de espera "largo" tendrá el mismo tiempo de espera efectivo que una prueba "grande" sin un tiempo de espera explícito.

--test_arg=arg

Pasa opciones de la línea de comandos, marcas o argumentos a cada proceso de prueba. Esta opción se puede usar varias veces para pasar varios argumentos. Por ejemplo, --test_arg=--logtostderr --test_arg=--v=3.

--test_env=variable=_value_ O --test_env=variable

Especifica las variables adicionales que se deben insertar en el entorno de pruebas para cada prueba. Si no se especifica value, se heredará del entorno de shell que se usa para iniciar el comando bazel test.

Se puede acceder al entorno desde una prueba con System.getenv("var") (Java), getenv("var") (C o C++)

--run_under=command-prefix

Esta indica un prefijo que el ejecutor de pruebas insertará delante del comando de prueba antes de ejecutarlo. El command-prefix se divide en palabras mediante las reglas de asignación de token de la shell Bourne y, luego, la lista de palabras se antepone al comando que se ejecutará.

Si la primera palabra es una etiqueta completamente calificada (comienza con //), se compila. Luego, la etiqueta se sustituye por la ubicación ejecutable correspondiente que se antepone al comando que se ejecutará junto con las otras palabras.

Ten en cuenta las siguientes advertencias:

  • La ruta de acceso que se usa para ejecutar pruebas puede ser diferente de la que se usa en tu entorno, por lo que es posible que debas usar una ruta de acceso absoluta para el comando --run_under (la primera palabra en command-prefix).
  • stdin no está conectado, por lo que no se puede usar --run_under para los comandos interactivos.

Ejemplos:

        --run_under=/usr/bin/strace
        --run_under='/usr/bin/strace -c'
        --run_under=/usr/bin/valgrind
        --run_under='/usr/bin/valgrind --quiet --num-callers=20'

Selección de prueba

Como se documenta en Opciones de selección de salida, puedes filtrar las pruebas por tamaño, tiempo de espera, etiqueta o idioma. Un filtro de nombre general de conveniencia puede reenviar argumentos de filtro específicos al ejecutor de pruebas.

Otras opciones para bazel test

La sintaxis y las opciones restantes son iguales a bazel build.

Ejecuta ejecutables

El comando bazel run es similar a bazel build, excepto que se usa para compilar y ejecutar un solo destino. Esta es una sesión típica:

  % bazel run java/myapp:myapp -- --arg1 --arg2
  Welcome to Bazel
  INFO: Loading package: java/myapp
  INFO: Loading package: foo/bar
  INFO: Loading complete.  Analyzing...
  INFO: Found 1 target...
  ...
  Target //java/myapp:myapp up-to-date:
    bazel-bin/java/myapp:myapp
  INFO: Elapsed time: 0.638s, Critical Path: 0.34s

  INFO: Running command line: bazel-bin/java/myapp:myapp --arg1 --arg2
  Hello there
  $EXEC_ROOT/java/myapp/myapp
  --arg1
  --arg2

bazel run es similar, pero no idéntico, a invocar directamente el objeto binario que compiló Bazel, y su comportamiento es diferente según si el objeto binario que se invocará es una prueba o no.

Cuando el objeto binario no es una prueba, el directorio de trabajo actual será el árbol de archivos de ejecución del objeto binario.

Cuando el objeto binario es una prueba, el directorio de trabajo actual será la raíz ejecutiva y se intentará, de buena fe, replicar las pruebas de entorno en las que se suelen ejecutar las pruebas. Sin embargo, la emulación no es perfecta y las pruebas que tienen varios fragmentos no se pueden ejecutar de esta manera (se puede usar la opción de línea de comandos --test_sharding_strategy=disabled para solucionar esto).

Las siguientes variables de entorno adicionales también están disponibles para el objeto binario:

  • BUILD_WORKSPACE_DIRECTORY: Es la raíz del lugar de trabajo en el que se ejecutó la compilación.
  • BUILD_WORKING_DIRECTORY: Es el directorio de trabajo actual desde el que se ejecutó Bazel.

Estos se pueden usar, por ejemplo, para interpretar nombres de archivos en la línea de comandos de una manera fácil de usar.

Opciones para bazel run

--run_under=command-prefix

Esto tiene el mismo efecto que la opción --run_under para bazel test (ver arriba), excepto que se aplica al comando que ejecuta bazel run en lugar de a las pruebas que ejecuta bazel test y no se pueden ejecutar bajo la etiqueta.

Filtra los resultados de registro de Bazel

Cuando se invoca un objeto binario con bazel run, Bazel imprime el resultado del registro de Bazel y el objeto binario que se está invocando. Para hacer que los registros sean menos ruidosos, puedes suprimir las salidas de Bazel con las marcas --ui_event_filters y --noshow_progress.

Por ejemplo:bazel run --ui_event_filters=-info,-stdout,-stderr --noshow_progress //java/myapp:myapp

Ejecución de pruebas

bazel run también puede ejecutar objetos binarios de prueba, lo que tiene el efecto de ejecutar la prueba en una aproximación del entorno descrito en Escribe pruebas. Ten en cuenta que ninguno de los argumentos --test_* tiene efecto cuando se ejecuta una prueba de esta manera, excepto --test_arg .

Cómo limpiar resultados de compilación

El comando clean

Bazel tiene un comando clean, análogo al de Make. Borra los directorios de salida de todas las configuraciones de compilación que realiza esta instancia de Bazel o todo el árbol de trabajo que creó esta instancia de Bazel, y restablece las cachés internas. Si se ejecuta sin ninguna opción de línea de comandos, se limpiará el directorio de salida de todas las configuraciones.

Recuerda que cada instancia de Bazel está asociada con un solo lugar de trabajo, por lo que el comando clean borrará todos los resultados de todas las compilaciones que realizaste con esa instancia de Bazel en ese lugar de trabajo.

Para quitar por completo todo el árbol de trabajo creado por una instancia de Bazel, puedes especificar la opción --expunge. Cuando se ejecuta con --expunge, el comando clean solo quita todo el árbol base de salida que, además del resultado de la compilación, contiene todos los archivos temporales que Bazel creó. También detiene el servidor de Bazel después de realizar la limpieza, lo que equivale al comando shutdown. Por ejemplo, para limpiar todos los seguimientos de disco y memoria de una instancia de Bazel, puedes especificar lo siguiente:

  % bazel clean --expunge

Como alternativa, puedes eliminar definitivamente en segundo plano con --expunge_async. Es seguro invocar un comando de Bazel en el mismo cliente mientras se ejecuta la eliminación asíncrona.

El comando clean se proporciona principalmente como una forma de recuperar espacio en disco para lugares de trabajo que ya no se necesitan. Es posible que las recompilaciones incrementales de Bazel no sean perfectas, por lo que se puede usar clean para recuperar un estado coherente cuando surjan problemas.

El diseño de Bazel permite corregir estos problemas y corregir esos errores. Si encuentras una compilación incremental incorrecta, presenta un informe de errores y, luego, informa errores en las herramientas en lugar de usar clean.

Cómo consultar el gráfico de dependencias

Bazel incluye un lenguaje de consulta para hacer preguntas sobre el gráfico de dependencias que se usa durante la compilación. Dos comandos usan el lenguaje de consulta: query y cquery. La principal diferencia entre los dos comandos es que la consulta se ejecuta después de la fase de carga y cquery se ejecuta después de la fase de análisis. Estas herramientas son una ayuda invaluable para muchas tareas de ingeniería de software.

El lenguaje de consulta se basa en la idea de operaciones algebraicas sobre gráficos; se documenta en detalle

Referencia de consultas de Bazel. Consulta ese documento a modo de referencia, para ver ejemplos y opciones de línea de comandos específicas de consultas.

La herramienta de consultas acepta varias opciones de línea de comandos. --output selecciona el formato de salida. --[no]keep_going (inhabilitado de forma predeterminada) hace que la Herramienta de consultas continúe progresando en caso de errores. Este comportamiento puede inhabilitarse si un resultado incompleto no es aceptable en caso de errores.

La opción --[no]tool_deps, habilitada de forma predeterminada, hace que las dependencias en las configuraciones que no son de destino se incluyan en el gráfico de dependencias en el que opera la consulta.

La opción --[no]implicit_deps, habilitada de forma predeterminada, hace que las dependencias implícitas se incluyan en el gráfico de dependencias en el que opera la consulta. Una dependencia implícita es aquella que no se especifica de forma explícita en el archivo BUILD, pero que Bazel la agrega.

Ejemplo: "Muestra las ubicaciones de las definiciones (en archivos BUILD) de todas las genrules necesarias para compilar todas las pruebas en el árbol PEBL".

  bazel query --output location 'kind(genrule, deps(kind(".*_test rule", foo/bar/pebl/...)))'

Cómo consultar el gráfico de acción

El comando aquery te permite consultar acciones en tu gráfico de compilación. Funciona en el grafo de destino configurado después del análisis y expone información sobre acciones, artefactos y sus relaciones.

La herramienta acepta varias opciones de la línea de comandos. --output selecciona el formato de salida. El formato de salida predeterminado (text) es legible. Usa proto o textproto para un formato legible por máquina. En particular, el comando aquery se ejecuta sobre una compilación normal de Bazel y hereda el conjunto de opciones disponibles durante una compilación.

Admite el mismo conjunto de funciones que también está disponible para los query tradicionales, pero siblings, buildfiles y tests.

Para obtener más detalles, lee Consulta del gráfico de acciones.

Comandos y opciones varios

help

El comando help proporciona ayuda en línea. De forma predeterminada, muestra un resumen de los comandos disponibles y los temas de ayuda, como se muestra en Compila con Bazel. Cuando especificas un argumento, se muestra una ayuda detallada para un tema en particular. La mayoría de los temas son comandos de Bazel, como build o query, pero hay algunos temas de ayuda adicionales que no corresponden a los comandos.

--[no]long (-l)

De forma predeterminada, bazel help [topic] imprime solo un resumen de las opciones relevantes para un tema. Si se especifica la opción --long, también se muestran el tipo, el valor predeterminado y la descripción completa de cada opción.

shutdown

Los procesos del servidor de Bazel se pueden detener con el comando shutdown. Este comando hace que el servidor de Bazel se cierre en cuanto que esté inactivo (por ejemplo, después de que se completen las compilaciones o algún otro comando que esté en curso en ese momento). Para obtener más detalles, consulta Implementación cliente/servidor.

Los servidores de Bazel se detienen después de un tiempo de espera de inactividad, por lo que este comando no suele ser necesario. Sin embargo, puede ser útil en las secuencias de comandos cuando se sabe que no se realizarán más compilaciones en un lugar de trabajo determinado.

shutdown acepta una opción, --iff_heap_size_greater_than _n_, que requiere un argumento de número entero (en MB). Si se especifica, esto hace que el cierre sea condicional para la cantidad de memoria ya consumida. Esto es útil para las secuencias de comandos que inician muchas compilaciones, ya que cualquier fuga de memoria en el servidor de Bazel podría causar una falla falsa de ocasión. Realizar un reinicio condicional interrumpe esta condición.

info

El comando info imprime varios valores asociados con la instancia del servidor de Bazel o con una configuración de compilación específica. (Pueden usarlas las secuencias de comandos que impulsan una compilación).

El comando info también permite un solo argumento (opcional), que es el nombre de una de las claves de la siguiente lista. En este caso, bazel info key imprimirá solo el valor de esa clave. Esto es muy conveniente cuando se ejecuta una secuencia de comandos de Bazel, ya que evita la necesidad de canalizar el resultado a través de sed -ne /key:/s/key://p:

Datos independientes de la configuración

  • release: Es la etiqueta de actualización de esta instancia de Bazel o “versión de desarrollo” si no se trata de un objeto binario de lanzamiento.
  • workspace es la ruta de acceso absoluta al directorio del lugar de trabajo base.
  • install_base: Es la ruta de acceso absoluta al directorio de instalación que usa esta instancia de Bazel para el usuario actual. Bazel instala sus ejecutables internos necesarios debajo de este directorio.

  • output_base: Es la ruta de acceso absoluta al directorio de salida base que usa esta instancia de Bazel para la combinación actual de usuario y lugar de trabajo. Bazel coloca todos sus resultados iniciales y de compilación debajo de este directorio.

  • execution_root: Es la ruta de acceso absoluta al directorio raíz de la ejecución en output_base. Ese directorio es la raíz de todos los archivos a los que pueden acceder los comandos que se ejecutan durante la compilación y es el directorio de trabajo para esos comandos. Si el directorio del lugar de trabajo admite escritura, se coloca un symlink llamado bazel-<workspace> que apunta a este directorio.

  • output_path: Es la ruta de acceso absoluta al directorio de salida debajo de la raíz de ejecución que se usa para todos los archivos que se generaron como resultado de los comandos de compilación. Si se admite escritura en el directorio del lugar de trabajo, se coloca un symlink llamado bazel-out que apunta a este directorio.

  • server_pid: Es el ID del proceso del servidor de Bazel.

  • server_log: Es la ruta de acceso absoluta al archivo de registro de depuración del servidor de Bazel. Este archivo contiene información de depuración para todos los comandos durante la vida útil del servidor de Bazel y está destinado al consumo humano por parte de desarrolladores y power users de Bazel.

  • command_log: Es la ruta de acceso absoluta al archivo de registro del comando; contiene las transmisiones intercaladas stdout y stderr del comando de Bazel más reciente. Ten en cuenta que ejecutar bazel info reemplazará el contenido de este archivo, ya que se convertirá en el comando de Bazel más reciente. Sin embargo, la ubicación del archivo de registro del comando no cambiará, a menos que cambies la configuración de las opciones --output_base o --output_user_root.

  • used-heap-size, committed-heap-size, max-heap-size: Informa varios parámetros de tamaño del montón de JVM. Respecto de la memoria usada, la memoria actualmente garantizada estará disponible para la JVM desde el sistema y la asignación máxima posible.

  • gc-count, gc-time: Es el recuento acumulativo de recolecciones de elementos no utilizados desde el inicio de este servidor de Bazel y el tiempo dedicado a realizarlas. Ten en cuenta que estos valores no se restablecen al comienzo de cada compilación.

  • package_path: Una lista de rutas de acceso separadas por dos puntos en las que Bazel buscaría paquetes. Tiene el mismo formato que el argumento de línea de comandos de compilación --package_path.

Ejemplo: El ID del proceso del servidor de Bazel.

% bazel info server_pid
1285

Datos específicos de la configuración

Esos datos pueden verse afectados por las opciones de configuración que se pasan a bazel info, por ejemplo, --cpu, --compilation_mode, etc. El comando info acepta todas las opciones que controlan el análisis de dependencias, ya que algunas determinan la ubicación del directorio de salida de una compilación, la elección del compilador, etcétera.

  • bazel-bin, bazel-testlogs, bazel-genfiles: Informa la ruta de acceso absoluta a los directorios bazel-* en los que se encuentran los programas generados por la compilación. Por lo general, aunque no siempre, es lo mismo que los symlinks bazel-* creados en el directorio del lugar de trabajo base después de una compilación exitosa. Sin embargo, si el directorio del lugar de trabajo es de solo lectura, no se pueden crear symlinks bazel-*. Las secuencias de comandos que usan el valor informado por bazel info, en lugar de suponer la existencia del symlink, serán más sólidas.
  • El entorno"Make" completo. Si se especifica la marca --show_make_env, también se muestran todas las variables en el entorno “Make” de la configuración actual (como CC, GLIBC_VERSION, etcétera). Estas son las variables a las que se accede mediante la sintaxis $(CC) o varref("CC") dentro de los archivos BUILD.

Ejemplo: El compilador de C++ para la configuración actual. Esta es la variable $(CC) en el entorno "Make", por lo que se necesita la marca --show_make_env.

  % bazel info --show_make_env -c opt COMPILATION_MODE
  opt

Ejemplo: El directorio de salida bazel-bin para la configuración actual Se garantiza que es correcto incluso en casos en los que no se puede crear el symlink bazel-bin por algún motivo (por ejemplo, si compilas desde un directorio de solo lectura).

% bazel info --cpu=piii bazel-bin
/var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/piii-opt/bin
% bazel info --cpu=k8 bazel-bin
/var/tmp/_bazel_johndoe/fbd0e8a34f61ce5d491e3da69d959fe6/execroot/io_bazel/bazel-out/k8-opt/bin

version y --version

El comando de versión imprime los detalles de la versión sobre el objeto binario de Bazel compilado, incluida la lista de cambios en la que se compiló y la fecha. Son particularmente útiles para determinar si tienes el último Bazel o si estás informando errores. Estos son algunos de los valores interesantes:

  • changelist: Es la lista de cambios en la que se lanzó esta versión de Bazel.
  • label: Es la etiqueta de actualización de esta instancia de Bazel o “versión de desarrollo” si no se trata de un objeto binario de lanzamiento. Es muy útil cuando se informan errores.

bazel --version, sin otros argumentos, emitirá el mismo resultado que bazel version --gnu_format, excepto sin el efecto secundario de iniciar un servidor de Bazel o descomprimir el archivo del servidor. bazel --version se puede ejecutar desde cualquier lugar. No requiere un directorio de lugar de trabajo.

mobile-install

El comando mobile-install instala apps en dispositivos móviles. Actualmente, solo se admiten dispositivos Android que ejecutan ART.

Consulta instalación para dispositivos móviles de Bazel para obtener más información.

Se admiten las siguientes opciones:

--incremental

Si se configura, Bazel intenta instalar la app de forma incremental, es decir, solo aquellas partes que cambiaron desde la última compilación. No se pueden actualizar los recursos a los que se hace referencia desde AndroidManifest.xml, código nativo ni recursos de Java (como los a los que hace referencia Class.getResource()). Si estos aspectos cambian, se debe omitir esta opción. Contrario al espíritu de Bazel y, debido a las limitaciones de la plataforma de Android, es responsabilidad del usuario saber cuándo este comando es lo suficientemente bueno y cuándo se necesita una instalación completa.

Si usas un dispositivo con Marshmallow o una versión posterior, considera la marca --split_apks.

--split_apks

Indica si se deben usar APK divididos para instalar y actualizar la aplicación en el dispositivo. Solo funciona con dispositivos con Marshmallow o versiones posteriores. Ten en cuenta que la marca --incremental no es necesaria cuando se usa --split_apks.

--start_app

Inicia la app en estado limpio después de la instalación. Equivale a --start=COLD.

--debug_app

Espera a que se adjunte el depurador antes de iniciar la app en un estado limpio después de la instalación. Equivale a --start=DEBUG.

--start=_start_type_

Cómo debe iniciarse la app después de instalarla. Los _start_type_s admitidos son los siguientes:

  • NO No inicia la app. Es la opción predeterminada.
  • COLD Inicia la app desde un estado limpio después de la instalación.
  • WARM Conserva y restablece el estado de la aplicación en las instalaciones incrementales.
  • DEBUG Espera al depurador antes de iniciar la app en un estado limpio después de la instalación.

--adb=path

Indica el objeto binario adb que se usará.

La opción predeterminada es usar adb en el SDK de Android especificado por --android_sdk.

--adb_arg=serial

Argumentos adicionales en adb. Estos aparecen antes del subcomando en la línea de comandos y, por lo general, se usan para especificar en qué dispositivo realizar la instalación. Por ejemplo, para seleccionar el emulador o dispositivo Android que se usará, haz lo siguiente:

% bazel mobile-install --adb_arg=-s --adb_arg=deadbeef

invoca a adb como

adb -s deadbeef install ...

--incremental_install_verbosity=number

La verbosidad para una instalación incremental. Configúralo en 1 para que el registro de depuración se imprima en la consola.

dump

El comando dump imprime para stdout un volcado del estado interno del servidor de Bazel. Este comando está destinado principalmente a desarrolladores de Bazel para que lo usen, por lo que su resultado no se especifica y está sujeto a cambios.

De forma predeterminada, el comando solo imprimirá un mensaje de ayuda en el que se describen las posibles opciones para volcar áreas específicas del estado de Bazel. Para volcar el estado interno, se debe especificar al menos una de las opciones.

Se admiten las siguientes opciones:

  • --action_cache vuelca el contenido de la caché de acciones.
  • --packages vuelca el contenido de la caché del paquete.
  • --skyframe vuelca el estado del gráfico de dependencia interno de Bazel.
  • --rules vuelca el resumen de la regla de cada regla y clase de aspecto, incluidos los recuentos y los recuentos de acciones. Esto incluye las reglas nativas y de Starlark. Si el seguimiento de memoria está habilitado, también se muestra el consumo de memoria de las reglas.
  • --skylark_memory vuelca un archivo .gz compatible con pprof en la ruta especificada. Debes habilitar el seguimiento de memoria para que esto funcione.

Seguimiento de la memoria

Algunos comandos dump requieren seguimiento de memoria. Para activar esto, debes pasar las marcas de inicio a Bazel:

  • --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar
  • --host_jvm_args=-DRULE_MEMORY_TRACKER=1

El agente java-agent se registra en Bazel en third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar, así que asegúrate de ajustar $BAZEL según la ubicación en la que almacenas tu repositorio de Bazel.

No olvides seguir pasando estas opciones a Bazel para cada comando. De lo contrario, se reiniciará el servidor.

Ejemplo:

    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    build --nobuild <targets>

    # Dump rules
    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    dump --rules

    # Dump Starlark heap and analyze it with pprof
    % bazel --host_jvm_args=-javaagent:$BAZEL/third_party/allocation_instrumenter/java-allocation-instrumenter-3.3.0.jar \
    --host_jvm_args=-DRULE_MEMORY_TRACKER=1 \
    dump --skylark_memory=$HOME/prof.gz
    % pprof -flame $HOME/prof.gz

analyze-profile

El comando analyze-profile analiza los datos recopilados previamente durante la compilación mediante la opción --profile. Proporciona varias opciones para analizar la ejecución de la compilación o exportar datos en el formato especificado.

Se admiten las siguientes opciones:

  • --dump muestra todos los datos recopilados en un formato legible por humanos. Sin embargo, esta función aún no admite otros formatos.

Para obtener detalles sobre el formato y ayuda de uso, consulta Cómo solucionar problemas de rendimiento mediante la generación de perfiles.

canonicalize-flags

El comando canonicalize-flags, que toma una lista de opciones para un comando de Bazel y muestra una lista de opciones que tienen el mismo efecto. La nueva lista de opciones es canónica. Por ejemplo, dos listas de opciones con el mismo efecto se canonicalizan en la misma lista nueva.

La opción --for_command se puede usar para seleccionar entre diferentes comandos. En este momento, solo se admiten build y test. Las opciones que no admite el comando dado causan un error.

Observa el siguiente ejemplo:

  % bazel canonicalize-flags -- --config=any_name --test_tag_filters="-lint"
  --config=any_name
  --test_tag_filters=-lint

Opciones de inicio

Las opciones que se describen en esta sección afectan el inicio de la máquina virtual de Java que usa el proceso del servidor de Bazel y se aplican a todos los comandos posteriores que controla ese servidor. Se reiniciará si ya hay un servidor de Bazel en ejecución y las opciones de inicio no coinciden.

Todas las opciones descritas en esta sección se deben especificar con la sintaxis --key=value o --key value. Además, estas opciones deben aparecer antes del nombre del comando de Bazel. Usa startup --key=value para enumerarlos en un archivo .bazelrc.

--output_base=dir

Esta opción requiere un argumento de ruta de acceso, que debe especificar un directorio que admita escritura. Bazel usará esta ubicación para escribir todos sus resultados. La base de salida también es la clave con la que el cliente localiza el servidor de Bazel. Cuando cambias la base de salida, cambias el servidor que controlará el comando.

De forma predeterminada, la base de salida se deriva del nombre de acceso del usuario y del nombre del directorio del lugar de trabajo (en realidad, su resumen de MD5), por lo que un valor típico se ve de la siguiente manera: /var/tmp/google/_bazel_johndoe/d41d8cd98f00b204e9800998ecf8427e.

Por ejemplo:

 OUTPUT_BASE=/var/tmp/google/_bazel_johndoe/custom_output_base
% bazel --output_base ${OUTPUT_BASE}1 build //foo  &  bazel --output_base ${OUTPUT_BASE}2 build //bar

En este comando, los dos comandos de Bazel se ejecutan de forma simultánea (debido al operador &amp; de shell), cada uno con una instancia de servidor de Bazel diferente (debido a las diferentes bases de resultados). Por el contrario, si la base de salida predeterminada se usara en ambos comandos, ambas solicitudes se enviarían al mismo servidor, que las controlaría de forma secuencial: primero se compila //foo y, luego, se genera una compilación incremental de //bar.

--output_user_root=dir

Apunta al directorio raíz en el que se crean las bases de instalación y salida. El directorio no debe existir o ser propiedad del usuario que realiza la llamada. Antes, esta función se permitía apuntar a un directorio compartido entre varios usuarios, pero ya no está permitido. Esto se puede permitir una vez que se solucione el problema n.o 11100.

Si se especifica la opción --output_base, anula el uso de --output_user_root para calcular la base de salida.

La ubicación de la base de instalaciones se calcula en función de --output_user_root, más la identidad de MD5 de los objetos binarios incorporados de Bazel.

Puedes usar la opción --output_user_root a fin de elegir una ubicación base alternativa para todos los resultados de Bazel (base de instalación y base de salida) si hay una mejor ubicación en el diseño del sistema de archivos.

--server_javabase=dir

Especifica la máquina virtual de Java en la que se ejecuta Bazel. El valor debe ser una ruta de acceso al directorio que contiene un JDK o JRE. No debe ser una etiqueta. Esta opción debe aparecer antes que cualquier comando de Bazel, por ejemplo:

  % bazel --server_javabase=/usr/local/buildtools/java/jdk11 build //foo

Esta marca no afecta a las JVM que usan los subprocesos de Bazel, como aplicaciones, pruebas, herramientas, etcétera. En su lugar, usa las opciones de compilación --javabase o --host_javabase.

Esta marca antes se llamaba --host_javabase (a veces denominada --host_javabase del "lado izquierdo"), pero se le cambió el nombre para evitar confusiones con la marca de compilación --host_javabase (a veces denominada --host_javabase del "lado derecho").

--host_jvm_args=string

Especifica una opción de inicio que se pasará a la máquina virtual de Java en la que se ejecuta Bazel. Se puede usar para establecer el tamaño de la pila, por ejemplo:

  % bazel --host_jvm_args="-Xss256K" build //foo

Esta opción se puede usar varias veces con argumentos individuales. Ten en cuenta que rara vez es necesario configurar esta marca. También puedes pasar una lista de strings separadas por espacios, cada una de las cuales se interpretará como un argumento de JVM independiente, pero esta función pronto dejará de estar disponible.

Esto no afecta a las JVM que usan los subprocesos de Bazel: aplicaciones, pruebas, herramientas, etcétera. Para pasar las opciones de JVM a programas ejecutables de Java, ya sea que se ejecuten mediante bazel run o en la línea de comandos, debes usar el argumento --jvm_flags que admiten todos los programas java_binary y java_test. Como alternativa para las pruebas, usa bazel test --test_arg=--jvm_flags=foo ....

--host_jvm_debug

Esta opción hace que la máquina virtual de Java espere una conexión desde un depurador compatible con JDWP antes de llamar al método principal de Bazel propiamente dicho. Está destinado principalmente a desarrolladores de Bazel.

--autodetect_server_javabase

Esta opción hace que Bazel busque automáticamente un JDK instalado en el inicio y recurra al JRE instalado si el JRE incorporado no está disponible. Se puede usar --explicit_server_javabase a fin de seleccionar un JRE explícito con el que ejecutar Bazel.

--batch

El modo por lotes hace que Bazel no use el modo de cliente/servidor estándar, sino que ejecuta un proceso de Java de Bazel para un solo comando, que se usó en una semántica más predecible con respecto al manejo de señales, el control de trabajos y la herencia de variables de entorno, y es necesario para ejecutar Bazel en una cárcel chroot.

El modo por lotes conserva la semántica de cola adecuada dentro de la misma output_base. Es decir, las invocaciones simultáneas se procesarán en orden y sin superposición. Si Bazel se ejecuta en un cliente con un servidor en ejecución en modo por lotes, primero cierra el servidor antes de procesar el comando.

Bazel se ejecutará más lento en el modo por lotes o con las alternativas descritas anteriormente. Esto se debe, entre otros aspectos, a que la caché del archivo de compilación es residente de la memoria, de modo que no se conserva entre invocaciones secuenciales por lotes. Por lo tanto, el uso del modo por lotes suele tener más sentido en los casos en que el rendimiento es menos crítico, como las compilaciones continuas.

--max_idle_secs=n

Esta opción especifica cuánto tiempo, en segundos, debe esperar el proceso del servidor de Bazel después de la última solicitud del cliente antes de salir. El valor predeterminado es 10,800 (3 horas). --max_idle_secs=0 hará que el proceso del servidor de Bazel persista de forma indefinida.

Las secuencias de comandos que invocan a Bazel pueden usar esta opción para asegurarse de no dejar procesos del servidor de Bazel en la máquina de un usuario cuando no se ejecutarían de otra manera. Por ejemplo, en una secuencia de comandos de envío previo, tal vez se quiera invocar bazel query para garantizar que el cambio pendiente de un usuario no introduzca dependencias no deseadas. Sin embargo, si el usuario no realizó una compilación reciente en ese lugar de trabajo, no será que la secuencia de comandos de envío previo inicie un servidor de Bazel solo para que permanezca inactivo durante el resto del día. Cuando se especifica un valor pequeño de --max_idle_secs en la solicitud de consulta, la secuencia de comandos puede garantizar que if causó el inicio de un servidor nuevo, ese servidor saldrá de inmediato. Sin embargo, si, en su lugar, ya había uno en ejecución, este continuará ejecutándose hasta que haya estado inactivo durante el tiempo habitual. Por supuesto, se restablecerá el temporizador de inactividad del servidor existente.

--[no]shutdown_on_low_sys_mem

Si se habilita y --max_idle_secs se establece en una duración positiva, después de que el servidor de compilación haya estado inactivo durante un tiempo, apágalo cuando el sistema tenga poca memoria. Solo en Linux.

Además de ejecutar una verificación de inactividad correspondiente a max_idle_secs, el servidor de compilación comenzará a supervisar la memoria disponible del sistema después de que el servidor haya estado inactivo durante un tiempo. Si hay poca memoria disponible en el sistema, se cerrará el servidor.

--[no]block_for_lock

Si se habilita, Bazel esperará a que otros comandos de Bazel que retienen el bloqueo del servidor se completen antes de avanzar. Si se inhabilita, Bazel salirá por error si no puede adquirir el bloqueo de inmediato y continuar.

Los desarrolladores pueden usar esta opción en las verificaciones previas al envío para evitar esperas largas causadas por otro comando de Bazel en el mismo cliente.

--io_nice_level=n

Establece un nivel de 0 a 7 para la mejor programación de E/S. 0 es la prioridad más alta, 7 es la menor. El programador anticipado solo puede respetar la prioridad 4. Se ignoran los valores negativos.

--batch_cpu_scheduling

Usa la programación de CPU batch para Bazel. Esta política es útil para las cargas de trabajo que no son interactivas, pero que no desean reducir su valor agradable. Consulta "man 2 sched_setscheduler". Esta política puede proporcionar una mejor interactividad del sistema a expensas de la capacidad de procesamiento de Bazel.

Otras opciones

--[no]announce_rc

Controla si Bazel anuncia las opciones de comando leídas desde el archivo de bazelrc cuando se inicia. (Las opciones de inicio se anuncian de forma incondicional).

--color (yes|no|auto)

Esta opción determina si Bazel usará colores para destacar su resultado en la pantalla.

Si esta opción se establece en yes, se habilita la salida de color. Si esta opción se configura como auto, Bazel usará la salida de color solo si el resultado se envía a una terminal y la variable de entorno TERM está configurada en un valor diferente de dumb, emacs o xterm-mono. Si esta opción se establece en no, la salida de color se inhabilita, independientemente de si el resultado se dirige a una terminal y de la configuración de la variable de entorno TERM.

--config=name

Selecciona la sección de configuración adicional de los archivos rc. Para el command actual, también extrae las opciones de command:name si esa sección existe. Se puede especificar varias veces para agregar marcas de varias secciones de configuración. Las expansiones pueden hacer referencia a otras definiciones (por ejemplo, las expansiones se pueden encadenar).

--curses (yes|no|auto)

Esta opción determina si Bazel usará los controles del cursor en el resultado de su pantalla. Esto da como resultado menos datos de desplazamiento y una transmisión de resultados de Bazel más compacta y fácil de leer. Esto funciona bien con --color.

Si estableces esta opción como yes, se habilitará el uso de los controles del cursor. Si estableces esta opción como no, el uso de los controles del cursor estará inhabilitado. Si esta opción se establece en auto, el uso de los controles del cursor se habilitará en las mismas condiciones que para --color=auto.

--[no]show_timestamps

Si se especifica, se agrega una marca de tiempo a cada mensaje generado por Bazel que especifica la hora a la que se mostró el mensaje.