Ninja: Solicitud de función: coincidencia de nombres de reglas más flexible en la herramienta compdb

Creado en 20 sept. 2015  ·  12Comentarios  ·  Fuente: ninja-build/ninja

Actualmente, para utilizar la herramienta compdb, necesita saber el nombre exacto de las reglas que desea consultar. Esto funciona bien siempre que estos nombres sean predecibles, pero este no es necesariamente el caso de algunos generadores.

En particular, en la versión 3.2 (creo), el generador ninja de CMake ha comenzado a generar reglas de la forma <lang>_COMPILER__<directory> . Esto significa que para consultar la base de datos de compilación, primero debe escanear el árbol de directorios del proyecto o recurrir a otros trucos. CMake antes de 3.2 genera reglas de la forma <lang>_COMPILER que hicieron posible consultar desde herramientas genéricas, sin un conocimiento específico del proyecto.

Por lo tanto, esta solicitud de función es para una coincidencia más flexible de los nombres de las reglas con los argumentos de la línea de comandos. Una implementación mínimamente útil permitiría la coincidencia de solo prefijo. Alternativamente, la coincidencia de expresiones regulares también sería útil.

Comentario más útil

Encuentro la herramienta compdb bastante difícil de usar; para mí, es sorprendente que necesite una lista de reglas (me tomó un tiempo hasta que lo descubrí). ¿Quizás si no se pasan reglas explícitas, eso podría significar simplemente "todas las reglas"? ¿Sería suficiente para las compilaciones basadas en cmake?

(No relacionado: creo que puede pasar CMAKE_EXPORT_COMPILE_COMMANDS a cmake para que escriba una base de datos de compilación directamente).

Todos 12 comentarios

En el pasado había una herramienta de "reglas" (7b67e48a1479c6fc7326c55756088bd57d64fc82) que podía imprimir la lista de todas las reglas. Con esa herramienta podríamos haber hecho algo así:

ninja -t compdb `ninja -t rules | grep 'CXX_COMPILER_'`

Creo que sería una buena idea resucitar esta herramienta, ya que también podría ayudar a escribir un script de finalización de shell. Intentaré hacer eso en los próximos días.

Eso también funcionaría, gracias.

Encuentro la herramienta compdb bastante difícil de usar; para mí, es sorprendente que necesite una lista de reglas (me tomó un tiempo hasta que lo descubrí). ¿Quizás si no se pasan reglas explícitas, eso podría significar simplemente "todas las reglas"? ¿Sería suficiente para las compilaciones basadas en cmake?

(No relacionado: creo que puede pasar CMAKE_EXPORT_COMPILE_COMMANDS a cmake para que escriba una base de datos de compilación directamente).

¿Hay alguien aquí? 🙂

la herramienta de reglas parece eliminada de la compilación?

Esto sería de gran ayuda.

Me gusta la sugerencia de @nico de imprimir todas las reglas por defecto. En el futuro, se podría agregar algo más sofisticado (como la coincidencia de comodines) si fuera necesario.

Noto que las soluciones sugeridas por aquí son bastante feas, lo que motiva una solución más hermosa en el propio ninja :)

Ahora hay # 1377 para deshacerse de todas las reglas por defecto.

Quería agregar una pequeña nota aquí, parece que para algunos proyectos de CMake [0], ninja -t compdb (sin argumentos) no volcará nada (la salida es una lista vacía [] ).

cmake -G Ninja .
ninja -t compdb
[
]

Sin embargo, usar CMAKE_EXPORT_COMPILE_COMMANDS como sugirió nico hará lo siguiente:

cmake -G Ninja . -DCMAKE_EXPORT_COMPILE_COMMANDS=1
ninja -t compdb
[
]

ninja -t compdb todavía devuelve vacío, pero compile_commands.json ya está generado.

Gracias nico!

[0] para Binaryen al menos

¿Qué dice ninja --version ?

1.8.2, por cierto, este ninja viene de depot_tools

A esa versión le falta la # 1377.

¿Fue útil esta página
0 / 5 - 0 calificaciones