Preguntas frecuentes

Informar un problema Ver fuente Noche {/2/}}

Estos son algunos problemas y preguntas habituales relacionados con las extensiones de escritura.

¿Por qué no se produce mi archivo o mi acción nunca se ejecuta?

Bazel solo ejecuta las acciones necesarias para producir los archivos de salida solicitados.

  • Si el archivo que deseas tiene una etiqueta, puedes solicitarla directamente: bazel build //pkg:myfile.txt

  • Si el archivo se encuentra en un grupo de salida del destino, es posible que debas especificar ese grupo de salida en la línea de comandos: bazel build //pkg:mytarget --output_groups=foo

  • Si deseas que el archivo se compile automáticamente cada vez que se menciona tu destino en la línea de comandos, agrégalo a los resultados predeterminados de la regla. Para ello, muestra un proveedor de DefaultInfo.

Consulta la página Reglas para obtener más información.

¿Por qué no se ejecuta mi función de implementación?

Bazel analiza solo los destinos que se solicitan para la compilación. Debes asignarle un nombre al destino en la línea de comandos o usar un nombre que dependa de él.

Falta un archivo cuando se ejecuta mi acción o objeto binario

Asegúrate de que 1) el archivo se haya registrado como entrada para la acción o el objeto binario, y que 2) la secuencia de comandos o la herramienta que se está ejecutando acceda al archivo con la ruta de acceso correcta.

En el caso de las acciones, debes declarar las entradas pasándolas a la función ctx.actions.* que crea la acción. Puedes obtener la ruta adecuada para el archivo con File.path.

En el caso de los objetos binarios (las salidas ejecutables ejecutadas por un comando bazel run o bazel test), debes declarar las entradas incluyéndolas en los runfiles. En lugar de usar el campo path, usa File.short_path, que es la ruta de acceso del archivo en relación con el directorio de archivos de ejecución en el que se ejecuta el objeto binario.

¿Cómo puedo controlar qué archivos compila bazel build //pkg:mytarget?

Usa el proveedor DefaultInfo para establecer los resultados predeterminados.

¿Cómo puedo ejecutar un programa o realizar I/O de archivos como parte de mi compilación?

Se puede declarar una herramienta como destino, al igual que cualquier otra parte de tu compilación, y ejecutarse durante la fase de ejecución para ayudar a compilar otros destinos. Para crear una acción que ejecute una herramienta, usa ctx.actions.run y pasa la herramienta como el parámetro executable.

Durante las fases de carga y análisis, no se puede ejecutar una herramienta ni puedes realizar una E/S de archivos. Esto significa que las herramientas y el contenido de los archivos (excepto el contenido de los archivos BUILD y .bzl) no pueden afectar la forma en que se crean los gráficos de destino y de acción.

¿Qué sucede si necesito acceder a los mismos datos estructurados antes y durante la fase de ejecución?

Puedes darles el formato de archivo .bzl a los datos estructurados. Puedes load() para acceder a él durante las fases de carga y análisis. Puedes pasarlo como archivo de entrada o de ejecución a las acciones y los ejecutables que lo necesiten durante la fase de ejecución.

¿Cómo debo documentar el código de Starlark?

Para las reglas y los atributos de reglas, puedes pasar un literal de docstring (posiblemente con comillas triples) al parámetro doc de rule o attr.*(). Para funciones y macros auxiliares, usa un literal de docstring con comillas triples siguiendo el formato que se indica aquí. Por lo general, las funciones de implementación de reglas no necesitan su propia docstring.

El uso de literales de cadena en los lugares esperados facilita que las herramientas automatizadas extraigan documentación. No dudes en usar comentarios estándar sin cadenas siempre que esto pueda ayudar al lector de tu código.