Ninja: Demande de fonctionnalité : correspondance de nom de règle plus flexible dans l'outil compdb

Créé le 20 sept. 2015  ·  12Commentaires  ·  Source: ninja-build/ninja

Actuellement, pour utiliser l'outil compdb, vous devez connaître le nom exact des règles que vous souhaitez interroger. Cela fonctionne bien à condition que ces noms soient prévisibles, mais ce n'est pas nécessairement le cas pour certains générateurs.

Plus particulièrement, dans la version 3.2 (je pense), le générateur de ninja de CMake a commencé à générer des règles de la forme <lang>_COMPILER__<directory> . Cela signifie que pour interroger la base de données de compilation, vous devez d'abord analyser l'arborescence du répertoire du projet ou recourir à d'autres hacks. CMake antérieur à 3.2 génère des règles de la forme <lang>_COMPILER qui permettaient d'interroger à partir d'outils génériques - sans connaissance spécifique du projet.

Par conséquent, cette demande de fonctionnalité est destinée à une correspondance plus flexible des noms de règles avec les arguments de ligne de commande. Une implémentation minimalement utile permettrait une correspondance de préfixe uniquement. Alternativement, la correspondance regex serait également utile.

Commentaire le plus utile

Je trouve l'outil compdb assez difficile à utiliser - pour moi, il est surprenant qu'il ait besoin d'une liste de règles (il m'a fallu un certain temps avant de comprendre cela). Peut-être que si aucune règle explicite n'est explicitement transmise, cela pourrait simplement signifier "toutes les règles" ? Cela suffirait-il pour les builds basés sur cmake ?

(Sans rapport : je pense que vous pouvez passer CMAKE_EXPORT_COMPILE_COMMANDS à cmake pour qu'il écrive directement une base de données de compilation.)

Tous les 12 commentaires

Dans le passé, il y avait un outil "règles" (7b67e48a1479c6fc7326c55756088bd57d64fc82) qui pouvait imprimer la liste de toutes les règles. Avec cet outil, nous aurions pu faire quelque chose comme ça :

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

Je pense que ce serait une bonne idée de ressusciter cet outil car il pourrait également aider à écrire un script de complétion du shell. Je vais essayer de le faire dans les prochains jours.

Cela fonctionnerait aussi, merci.

Je trouve l'outil compdb assez difficile à utiliser - pour moi, il est surprenant qu'il ait besoin d'une liste de règles (il m'a fallu un certain temps avant de comprendre cela). Peut-être que si aucune règle explicite n'est explicitement transmise, cela pourrait simplement signifier "toutes les règles" ? Cela suffirait-il pour les builds basés sur cmake ?

(Sans rapport : je pense que vous pouvez passer CMAKE_EXPORT_COMPILE_COMMANDS à cmake pour qu'il écrive directement une base de données de compilation.)

Y a-t'il quelqu'un ici? ??

l'outil de règles semble supprimé de la construction?

Ce serait vraiment utile.

J'aime la suggestion de @nico de simplement imprimer toutes les règles par défaut. À l'avenir, quelque chose de plus sophistiqué (comme la correspondance de caractères génériques) pourrait être ajouté si nécessaire.

Je note que les solutions de contournement suggérées par ici sont plutôt laides, motivant une plus belle solution dans ninja lui-même :)

Il y a maintenant #1377 pour vider toutes les règles par défaut.

Je voulais ajouter une petite note ici, il semble que pour certains projets CMake [0], ninja -t compdb (pas d'arguments) ne videra rien (la sortie est une liste vide [] ).

cmake -G Ninja .
ninja -t compdb
[
]

Cependant, en utilisant CMAKE_EXPORT_COMPILE_COMMANDS comme suggéré par Nico :

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

ninja -t compdb renvoie toujours vide, mais compile_commands.json est déjà généré.

Merci nico !

[0] pour Binaryen au moins

Que dit ninja --version ?

1.8.2, d'ailleurs ce ninja vient de depot_tools

Cette version est manquante #1377.

Cette page vous a été utile?
0 / 5 - 0 notes