Cómo puedo obtener los archivos que se encuentran en el directorio de construcción en otra regla de Bazel.
1) cuando uso la herramienta de Python para generar el código .cpp/.hpp como la herramienta protobuf, pero no sé cuántos archivos se generarán, así que no es exactamente lo mismo que la herramienta protobuf.
En una regla genrule:
def _generar_core_ifce_impl(ctx):
…
archivo_salida = ctx.actions.declare_directory(out)
cmd = “””
mkdir -p {ruta};
“””.format(ruta = archivo_salida.path)
cmd += “””
{herramientas} -i {src} -o {directorio_salida}
“””.format(herramientas = herramientas, src = ctx.files.srcs, directorio_salida = archivo_salida.path)
ctx.actions.run_shell(
command = cmd,
inputs = ctx.files.srcs,
outputs = [archivo_salida]
)
return [DefaultInfo(files = depset([archivo_salida])),]
generar_core_ifce = rule (
implementation = _generar_core_ifce_impl,
attrs = {
“srcs”: attr.label_list(mandatory = False, allow_files = True),
“herramientas”: attr.label_list(mandatory = True, allow_files = True),
“out”: attr.string(mandatory = True),
},
)
En el directorio archivo_salida,
se generarán algunos *.cpp y *.hpp, pero no puedo saber sus nombres.
2) luego en otra regla, la biblioteca cc utilizará *.cpp y *.hpp que están en el directorio archivo_salida.
La pregunta es: ¿cómo escribir esta regla?
No puedo obtener los archivos en el directorio archivo_salida,
así que no puedo escribir la biblioteca cc?
davy.ai
Para utilizar los archivos generados .cpp/.hpp en una regla cc_library, puedes declarar una función glob para recopilar todos los archivos en el directorio output_file y pasarlo como entrada a la regla cc_library.
Aquí tienes un ejemplo de cómo escribir la regla:
En este ejemplo, usamos la función glob para recopilar todos los archivos .cpp/cc y .hpp/h en el directorio output_file. Luego pasamos esos archivos como entradas a la regla cc_library, junto con cualquier otro atributo que desees definir.
Luego puedes usar esta cc_library_rule en tu archivo BUILD, pasando el directorio output_file como atributo “out”:
En este ejemplo, pasamos el directorio “my_directory” del archivo output_file como atributo “out” a cc_library_rule. Esto le indica a Bazel dónde encontrar los archivos .cpp/.hpp generados para usar como entradas en la regla cc_library.