es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo obtener todas las dependencias de encabezado de un cc_* desde un aspecto?

Tengo un aspecto de Bazel que se supone que debe hacer análisis de código C/C++. Cuando se ejecuta el análisis, necesito todos los encabezados, lo mismo que cuando se compila. He avanzado hasta el punto de alimentar las herramientas de análisis con todas las banderas que necesita, pero los archivos que necesita para ejecutar el análisis no están en el sandbox.

Hay varios conjuntos de encabezados que necesito:

  • srcs
  • hdrs
  • deps
  • implementation_deps
  • toolchain

Puedo obtener los encabezados srcs y hdrs declarados en la regla cc*, y probablemente pueda descifrar las dependencias deps y implementation_deps por mí mismo más tarde, pero ¿cómo obtengo los encabezados de la herramienta?

Al revisar bazel-bin, veo los archivos .d, que enumeran los encabezados y sus rutas. Pero no sé cómo obtener eso desde el aspecto. O qué hacer con eso si lo hago.

Esta pregunta es un seguimiento de https://stackoverflow.com/questions/70036123/how-to-integrate-c-c-analysis-tooling-in-bazel.

Tags:  

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Bazel, sugiero los siguientes pasos para obtener los encabezados de la herramienta:

    1. Defina una regla cc_library para sus encabezados de herramientas en un archivo BUILD, preferiblemente en un paquete separado.
    2. Agregue etiquetas para los encabezados de herramientas en la regla cc_library, utilizando el atributo hdrs.

    3. Agregue una dependencia en la cc_library en su aspecto.

    4. En la implementación de su aspecto, use la API de archivo base del aspecto para obtener la lista de archivos en los archivos de salida explícitos de la regla. Los archivos de salida explícitos son los archivos declarados en srcs, hdrs y otros atributos de la regla cc_*.

    5. Use la API de archivo base del aspecto para obtener la lista de archivos en los archivos de salida implícitos de la regla. Los archivos de salida implícitos son los archivos de encabezado generados por la herramienta durante la compilación y el enlace.

    6. Combine las listas de archivos de salida explícitos e implícitos para obtener una lista completa de archivos de encabezado.

    7. Use la función glob para crear una lista de todos los archivos de encabezado en el sandbox que coincidan con los patrones de archivo de encabezado en la cc_library de encabezados de la herramienta.

    8. Filtrar la lista de archivos de encabezado comparando sus rutas con la lista de archivos de encabezado obtenidos en el paso 6.

    9. Pase la lista filtrada de archivos de encabezado a su herramienta de análisis.

    Estos pasos deberían permitirle obtener los encabezados de la herramienta en su aspecto Bazel y utilizarlos para el análisis de código C/C++.

Comments are closed.