はじめに
Understandのプロジェクト作成時、最初に詰まりやすい部分としては、解析時にエラーが大量に出てきてしまうことではないでしょうか。
Understandでは、解析前にプロジェクトが参照するインクルードファイルパス、マクロ定義を設定する必要がありますが、プロジェクトが大きいと手動で行う設定も多くなり、手間がかかります。
しかし、これらの情報はビルド環境に存在しています。 Understandではいくつかの方法でビルド環境から情報を吸い上げ、手動で行う部分を簡易化することができます。
- compile_commands.jsonのインポート機能(C/C++)
- 統合開発環境(IDE)のプロジェクトファイルのインポート機能
- ビルド監視機能(C/C++)
- Buildspy(C/C++)
今回は「compile_commands.jsonのインポート機能」について説明したいと思います。
以前のブログでも触れましたが、より詳細情報を含めて説明したいと思います。
compile_commands.jsonとは
compile_commands.jsonとは、一般にコンパイルデータベースと呼ばれており、コンパイルに関する情報を格納するファイルです。このファイルを解析することにより、どのようなコンパイルをしたのかを知ることができます。Understandでは、このファイルを解析し、解析対象ファイルに対するインクルードパス情報やマクロ情報を吸い上げ、プロジェクトを作成することができます。
出力方法
compile_commands.jsonを出力できる機能を3つ紹介します。
CMake
CMakeでは、CMakeList.txt内に設定を追加することでビルド時に コンパイルデータベースを出力できます。
Bear
Bearはコンパイルデータベースを出力してくれるツールです。Makeなどのビルド環境を利用している場合に有効です。ただし、現在ではLinux環境のみ対応とのことでした。
出力先のファイル名に「compile_commands.json」を指定することで、同ファイルを出力してくれます。Bearの詳しいインストール方法や使用方法は開発元GitHubのREADMEを参考にしてください。
rizsotto/Bear: Bear is a tool that generates a compilation database for clang tooling.
IAR Embedded Workbench
最近のIAR Embedded Workbench(バージョン9.2以降)ではcompile_commands.jsonを出力できるようです。
コマンドラインより指定のコマンドを発行することで出力できます。
プロジェクトの作成手順
プロジェクトの作成は簡単です。スクリーンショットはUnderstand 6.5 アルファ版を使用していますが、日本語最新版の 6.3 でも同様の手順です。
- Understandを起動して、メニューより[ファイル]-[新規]-[プロジェクトの作成]を選択します。
- 新規プロジェクトウィザードが表示されますので、「ルートディレクトリ」にソースコードのある 最上位フォルダを指定して「次へ」を選択します。
ここまでは通常通りですが、compile_commands.jsonが指定したフォルダ配下にある場合、「インポート設定」に飛び、取り込めるファイル群が表示されます。 - インポート設定より、compile_commands.jsonを選択してインポートします。
- ファイルを読み込み、解析対象のファイルがプレビュー表示されますので「次へ」を押します。
- 「言語の選択」画面に移ります。コンパイラ選択をして「次へ」を押します。
- 「場所の設定」画面にて「プロジェクト作成」ボタンを押すとプロジェクトが作成され、解析がスタートします。
確認方法
プロジェクト作成が完了したら、メニューの[プロジェクト]-[プロジェクト設定]-[インポート]より画面上で確認できます。通常のプロジェクト作成とは異なり、ファイルごとにインクルードパス、マクロ設定が設定されます(オーバーライド設定)。
Understandは解析時にcompile_commands.jsonが更新されている場合、その変更内容を反映します。そのため、開発中などでファイルの増減があっても、Understand上では再解析を行うだけで最新のファイル構成で解析結果を得ることができます。
注意事項
- コンパイルデータベースには、標準ライブラリなどの情報がないことがあります。その場合、この方法でも解析エラーが発生することがありますので、足りない参照、コンパイラ情報などは「プロジェクト設定」より設定してください。
- コンパイルデータベースに記載されるパス情報は相対パスとなっていますので、出力したJSONファイルを移動せずに使用してください。
まとめ
コンパイルデータベースを利用することで、実際のビルド環境と同じ参照設定を使用することができ、解析のエラーも最小限に抑えることができます。
対象となる環境をお使いの場合は、是非一度お試しください。