Open4
Reposoup: CMake File APIから情報を抽出する

CMakeにはfile APIがあり、これを使ってプロジェクトの情報をいろいろと抽出できる。例えば、
- ターゲットを定義した CMakeLists.txt のパスとコード内の場所 (codemodel → target)
- CMakeが認識しているtoolchainの詳細 (toolchain)
これを今回は ファイル / ディレクトリ / ターゲット → CMake プロジェクトおよびビルドディレクトリ を引く逆引きデータベースの作成に使いたい。例えば、エディタから補完を行うためには開かれているファイルがコンパイルされる可能性があるCMakeプロジェクトを列挙し、適切なコマンドラインオプションを見出す必要がある。

JSONファイルの収集
各クエリ毎に生成されるindexと他のファイルでは命名規則が異なる。
Indexは index-2025-04-26T06-11-05-0730.json
のように、日付がサフィックスされる。それ以外のデータは target-mbedtls-cbc40d1a7365aaff5786.json
のように内容のハッシュがサフィックスされる。ただしこれらのサフィックスの内容は CMake的には仕様ではないという立場 になっている。
ファイルのパスは常に .cmake/api/v1/reply/
以下となる。

ターゲットの収集
codemodel → target の順に収集する。カスタムコマンド等もターゲットになるため、 artifacts
があるものに絞ることになる。

CMakeLists.txt
を選択する
Backtraceで最初の ターゲットの追加元プロジェクトを導出するために、backtraceで最初に出現する CMakeLists.txt
を選ぶようにした。 ...いやまぁCMake4では名前も指定できるようになったのであんまり正しくないけど。。