現在、compdbツールを使用するには、クエリするルールの正確な名前を知っている必要があります。 これらの名前が予測可能であれば、これは問題なく機能しますが、一部のジェネレーターでは必ずしもそうとは限りません。
最も注目すべきは、バージョン3.2(私は思う)でCMakeの忍者ジェネレーターが<lang>_COMPILER__<directory>
形式のルールの生成を開始したことです。 つまり、コンパイルデータベースにクエリを実行するには、最初にプロジェクトディレクトリツリーをスキャンするか、他のハックに頼る必要があります。 3.2より前のCMakeは、 <lang>_COMPILER
の形式のルールを生成します。これにより、プロジェクトに関する特定の知識がなくても、汎用ツールからクエリを実行できるようになりました。
したがって、この機能要求は、コマンドライン引数に対するルール名のより柔軟な照合を目的としています。 最小限の有用な実装では、プレフィックスのみのマッチングが可能になります。 あるいは、正規表現のマッチングも役立ちます。
以前は、すべてのルールのリストを印刷できる「ルール」ツール(7b67e48a1479c6fc7326c55756088bd57d64fc82)がありました。 そのツールを使用すると、次のようなことができます。
ninja -t compdb `ninja -t rules | grep 'CXX_COMPILER_'`
シェル補完スクリプトの作成にも役立つ可能性があるため、このツールを復活させることをお勧めします。 私は数日中にそれをやろうとします。
それもうまくいくでしょう、ありがとう。
compdbツールの使い方はかなり難しいと思います。私にとって、ルールのリストが必要なのは驚くべきことです(それがわかるまで、しばらく時間がかかりました)。 明示的なルールが明示的に渡されていない場合、それは単に「すべてのルール」を意味する可能性がありますか? cmakeベースのビルドにはそれで十分でしょうか?
(無関係: CMAKE_EXPORT_COMPILE_COMMANDS
をcmakeに渡して、コンパイルデータベースを直接書き込むことができると思います。)
ここに誰かいますか? 🙂
ルールツールがビルドから削除されたようですか?
これは本当に役に立ちます。
デフォルトですべてのルールを出力するという@nicoの提案が好きです。 将来的には、必要に応じて、より高度なもの(ワイルドカードマッチングなど)を追加する可能性があります。
ここで@sarcasmが提案する回避策はかなり醜く、忍者自体のより美しい解決策を動機付けていることに注意してください:)
デフォルトですべてのルールをダンプするための#1377があります。
ここに小さなメモを追加したかったのですが、一部のCMakeプロジェクト[0]では、 ninja -t compdb
(引数なし)は何もダンプしないようです(出力は空のリスト[]
)。
cmake -G Ninja .
ninja -t compdb
[
]
ただし、nicoが提案したようにCMAKE_EXPORT_COMPILE_COMMANDS
を使用すると、次のようになります。
cmake -G Ninja . -DCMAKE_EXPORT_COMPILE_COMMANDS=1
ninja -t compdb
[
]
ninja -t compdb
まだ空を返しますが、compile_commands.jsonはすでに生成されています。
ありがとうニコ!
[0]少なくともBinaryenの場合
ninja --version
は何と言っていますか?
1.8.2、ところでこの忍者はdepot_toolsから来てい
そのバージョンには#1377がありません。
最も参考になるコメント
compdbツールの使い方はかなり難しいと思います。私にとって、ルールのリストが必要なのは驚くべきことです(それがわかるまで、しばらく時間がかかりました)。 明示的なルールが明示的に渡されていない場合、それは単に「すべてのルール」を意味する可能性がありますか? cmakeベースのビルドにはそれで十分でしょうか?
(無関係:
CMAKE_EXPORT_COMPILE_COMMANDS
をcmakeに渡して、コンパイルデータベースを直接書き込むことができると思います。)