Preguntas frecuentes

Informar un problema Ver fuente . Por la noche · 7.3 · 7.2 · 7.1 · 7.0 · 6.5

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 objetivo, quizás debas especificar que de salida en la línea de comandos: bazel build //pkg:mytarget --output_groups=foo

  • Si quieres que el archivo se compile automáticamente cuando tu destino como se menciona en la línea de comandos, agrégala a los resultados predeterminados de la regla mostrar un proveedor 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. Deberías ya sea nombrar el destino en la línea de comandos, o algo que dependa objetivo.

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. binario y 2) la secuencia de comandos o la herramienta que se está ejecutando accede al archivo usando el la ruta correcta.

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

Para objetos binarios (las salidas ejecutables que se ejecutan en una instancia de bazel run o bazel test) ), debes declarar entradas incluyéndolas en el runfiles. En lugar de usar el campo path, usa File.short_path, que es la ruta 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 establece las salidas predeterminadas.

¿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. se ejecutan durante la fase de ejecución para ayudar a crear otros objetivos. Cómo crear una acción que ejecute una herramienta, usa ctx.actions.run y pasa el como el parámetro executable.

Durante las fases de carga y análisis, no se puede ejecutar una herramienta ni se puede realizar de E/S de archivos. Esto significa que las herramientas y el contenido de los archivos (excepto los contenidos de BUILD) y archivos .bzl) no afectan la forma en que se crean los gráficos de objetivos 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() el archivo acceder a él durante las fases de carga y análisis. Puedes pasarlo como una entrada o runfile a acciones y ejecutables que lo necesiten durante la fase de ejecución.

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

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

Usar literales de cadena en los lugares esperados facilita herramientas para extraer documentación. Puedes usar comentarios estándar que no sean cadenas dondequiera que esto ayude al lector de tu código.