Ninja: Funktionsanfrage: Flexiblerer Regelnamenabgleich im compdb-Tool

Erstellt am 20. Sept. 2015  ·  12Kommentare  ·  Quelle: ninja-build/ninja

Um das compdb-Tool verwenden zu können, müssen Sie derzeit den genauen Namen der Regeln kennen, die Sie abfragen möchten. Dies funktioniert in Ordnung, vorausgesetzt, diese Namen sind vorhersehbar, aber dies ist bei einigen Generatoren nicht unbedingt der Fall.

Vor allem in Version 3.2 (glaube ich) hat der Ninja-Generator von CMake damit begonnen, Regeln der Form <lang>_COMPILER__<directory> generieren. Das bedeutet, dass Sie zum Abfragen der Kompilierungsdatenbank zunächst den Projektverzeichnisbaum durchsuchen oder auf andere Hacks zurückgreifen müssen. CMake vor 3.2 generiert Regeln der Form <lang>_COMPILER die es ermöglichten, von generischen Tools abzufragen - ohne spezielle Kenntnisse des Projekts.

Daher dient diese Funktionsanforderung einem flexibleren Abgleich von Regelnamen mit Befehlszeilenargumenten. Eine minimal nützliche Implementierung würde einen Nur-Präfix-Abgleich ermöglichen. Alternativ wäre auch ein Regex-Matching sinnvoll.

Hilfreichster Kommentar

Ich finde das compdb-Tool ziemlich schwer zu verwenden - für mich ist es überraschend, dass es eine Liste von Regeln benötigt (es hat eine Weile gedauert, bis ich das herausgefunden habe). Wenn keine expliziten Regeln explizit übergeben werden, könnte das vielleicht nur "alle Regeln" bedeuten? Wäre das für cmake-basierte Builds ausreichend?

(Nicht im Zusammenhang: Ich denke, Sie können CMAKE_EXPORT_COMPILE_COMMANDS an cmake übergeben, damit es direkt eine Kompilierungsdatenbank schreibt.)

Alle 12 Kommentare

In der Vergangenheit gab es ein "Regel"-Tool (7b67e48a1479c6fc7326c55756088bd57d64fc82), das die Liste aller Regeln drucken konnte. Mit diesem Tool hätten wir so etwas machen können:

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

Ich denke, es wäre eine gute Idee, dieses Tool wiederzubeleben, da es auch helfen könnte, ein Shell-Vervollständigungsskript zu schreiben. Das werde ich in den nächsten Tagen versuchen.

Das würde auch funktionieren, danke.

Ich finde das compdb-Tool ziemlich schwer zu verwenden - für mich ist es überraschend, dass es eine Liste von Regeln benötigt (es hat eine Weile gedauert, bis ich das herausgefunden habe). Wenn keine expliziten Regeln explizit übergeben werden, könnte das vielleicht nur "alle Regeln" bedeuten? Wäre das für cmake-basierte Builds ausreichend?

(Nicht im Zusammenhang: Ich denke, Sie können CMAKE_EXPORT_COMPILE_COMMANDS an cmake übergeben, damit es direkt eine Kompilierungsdatenbank schreibt.)

Ist hier jemand? 🙂

das Regelwerkzeug scheint aus dem Build entfernt zu sein?

Dies wäre wirklich hilfreich.

Ich mag den Vorschlag von @nico , standardmäßig alle Regeln zu drucken. In Zukunft könnte bei Bedarf etwas ausgefeilteres (wie Wildcard-Matching) hinzugefügt werden.

Ich stelle fest, dass die von hier vorgeschlagenen Workarounds ziemlich hässlich sind und eine schönere Lösung in Ninja selbst motivieren :)

Es gibt jetzt #1377 zum standardmäßigen Dumpen aller Regeln.

Wollte hier eine kleine Anmerkung hinzufügen, es scheint, dass für einige CMake-Projekte [0] ninja -t compdb (keine Argumente) nichts ausgibt (die Ausgabe ist eine leere Liste [] ).

cmake -G Ninja .
ninja -t compdb
[
]

Wenn Sie jedoch CMAKE_EXPORT_COMPILE_COMMANDS wie von nico vorgeschlagen, wird:

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

ninja -t compdb immer noch leer zurück, aber compile_commands.json ist bereits generiert.

Danke Niko!

[0] zumindest für Binaryen

Was sagt ninja --version ?

1.8.2, dieser Ninja kommt übrigens von

Diese Version fehlt #1377.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen