概要
このセクションでは、C/C++test と Bazel ビルドを統合し、静的解析およびコード カバレッジの収集を行う方法を説明します。
要件
- C/C++test for Linux (Windows はサポートされていません)
- Bazel version 4.0+
C/C++test を Bazel のローカル リポジトリとして追加する
C/C++test をインストールしただけの状態では、Bazel ローカル リポジトリとして動作しません。次の手順に従って、C/C++test を Bazel のローカル リポジトリとして追加します。
- C/C++test インストール ディレクトリの
integration/bazel
ディレクトリにある WORKSPACE.bazel および BUILD.bazel ファイルをインストール ディレクトリの直下に移動します。注意: ファイルが移動され、cd <INSTALL_DIR> mv integration/bazel/WORKSPACE.bazel . mv integration/bazel/BUILD.bazel .
integration/bazel
ディレクトリにコピーが残っていないことを確認します。 - プロジェクトのルートにある Bazel WORKSPACE ファイルを開きます。
WORKSPACE ファイルで C/C++test のインストール ディレクトリを Bazel のローカル リポジトリとして登録します。
local_repository(name = "cpptest", path = "<INSTALL_DIR>")
ビルド ターゲットのサンプル
以降の手順では次のサンプルを使用します。
cc_binary( name = "hello-world", srcs = ["hello-world.cc"], deps = [ ":hello-greet", ], )
BDF ファイルの生成
"
@cpptest
//:bdf
" ルールを実行して BDF ファイルを生成します。bazel run @cpptest//:bdf --@cpptest//:target=//:hello-world --@cpptest//:compiler-config=gcc_10-64 --@cpptest//:project-name=HelloWorld
プロジェクトのルートに BDF ファイルが生成されます。統合によって、C/C++test Professional がプロジェクトを C/C++test プロジェクトとして開くのに必要なファイルも生成されます。
プロジェクトを Eclipse ワークスペースにインポートして解析を実行します。
cpptestcli -data /path/to/workspace -import . -config "builtin://Recommended Rules"
- BDF を生成しても、実行ファイル、オブジェクト、生成済みソースなどのプロジェクト成果物は作成されません。
- プロジェクトに対して自動生成されたコードは、
bazel-build
サブディレクトリに配置されます。 - bazel clean を実行すると、このディレクトリの内容が削除され、BDF が無効になります。
- ターゲットを再ビルドすると、BDF 内の不足している参照が解決されます。
コード カバレッジが有効な実行ファイルの生成
次の手順に従ってコード カバレッジ インストゥルメンテーションを含むバイナリ コードを生成します。
"@cpptest//:coverage" ルールを実行し、インストゥルメントされたバイナリを生成します。
bazel run @cpptest//:coverage --@cpptest//:target=//:hello-world --@cpptest//:compiler-config=gcc_10-64 --@cpptest//:line-coverage
- 生成される実行ファイルは "<TARGET_NAME>.elf" という形式であり、通常バイナリが生成されるのと同じレベルにある bazel-bin ディレクトリに配置されます。上の例では、"hello-world.elf" が生成されます。(ファイル拡張子 ".elf" の使用は任意です)
- Bazel との統合はインストゥルメントされたバイナリを実行しません。
インストゥルメントされたバイナリを実行します。
./bazel-bin/hello-world.elf
プロジェクトを Eclipse ワークスペースにインポートしてカバレッジ レポートを生成します。
cpptestcli -data /path/to/workspace -import . -config "builtin://Load Application Coverage"
注意:
- メモリ割り当ての問題が発生する場合、「Bazel ビルドで C/C++test を使用時にメモリが割り当てられない場合」を参照してください。
- サードパーティおよび外部ソースのカバレッジは IDE に表示されない場合があります。
- C/C++test は Bazel プロジェクトのカバレッジ レポートを生成する際にファイル パス内のシンボリック リンクを解決します。シンボリック リンクを未解決のままにするには、カバレッジ レポートを生成する前に次の環境変数を定義します。
export CPPTEST_COVERAGE_SRC_ROOT_RESOLVE_SYMLINKS=false
カバレッジ インストゥルメンテーション ツール (cpptestcc) の設定
.psrc 設定ファイルを使用してカバレッジ インストゥルメンテーション ツール (cpptestcc) を設定できます。
プロジェクトにサンプル .psrc ファイルをコピーします。
cp <INSTALL_DIR>/integration/bazel/cpptestcc-bazel.psrc <PROJECT_ROOT>/cpptestcc-bazel.psrc
- 必要に応じて cpptestcc-bazel.psrc の内容を変更します。オプションの一覧については、「cpptestcc コマンド ライン リファレンス」を参照するか、次のコマンドを実行してください。
cpptestcc -help
BUILD.bazel ファイルに "cpptestcc-bazel-psrc" ファイルグループを定義し、cpptestcc-bazel.psrc ファイルを参照します。
filegroup(name = "cpptestcc-bazel-psrc", srcs = ["cpptestcc-bazel.psrc"], visibility = ["//visibility:public"])
"@cpptest//:coverage" ルールを実行する際、"--@cpptest//:psrc_file" オプションを使用して "cpptestcc-bazel-psrc" ファイルグループを指定します。
bazel run @cpptest//:coverage --@cpptest//:target=//:hello-world --@cpptest//:psrc_file=//:cpptestcc-bazel-psrc
C/C++test の Bazel ルールの設定オプション
共通引数
オプション | 説明 |
---|---|
--@cpptest//:target=<TARGET> | 解析対象のターゲット ルールを指定します。"cc_*" タイプまたはその派生タイプのプロジェクト ルールを指定する必要があります。 |
--@cpptest//:psrc_file=<CUSTOM_PSRC_FILEGROUP> | .psrc 設定ファイルのファイルグループを指定します。「カバレッジ インストゥルメンテーション ツール (cpptestcc) の設定」を参照。 |
"@cpptest//:bdf" ルール引数
オプション | 説明 |
---|---|
--@cpptest//:project-name=<NEW_PROJECT_NAME> | 生成される BDF ファイルの名前を変更します。 |
--@cpptest//:missing-bazel-dirs="external","<DIRS>" | 解析時に見つかったディレクトリへのパスの先頭を指定します。BDF 内では、このパスの前に "bazel-[project-name]" が付加されます。 |
"@cpptest//:coverage" ルール引数
オプション | 説明 |
---|---|
--@cpptest//:compiler-config=<COMPILER_CONFIGURATION_NAME> | コンパイラ設定を指定します。 |
--@cpptest//:line-coverage --@cpptest//:mcdc-coverage --@cpptest//:optimized-line-coverage --@cpptest//:function-coverage --@cpptest//:optimized-function-coverage --@cpptest//:statement-coverage --@cpptest//:optimized-statement-coverage --@cpptest//:block-coverage --@cpptest//:optimized-block-coverage --@cpptest//:simple-condition-coverage --@cpptest//:optimized-simple-condition-coverage --@cpptest//:path-coverage --@cpptest//:decision-coverage --@cpptest//:optimized-decision-coverage --@cpptest//:call-coverage --@cpptest//:optimized-call-coverage | 特定のカバレッジ メトリクスを有効化します。 .psrc ファイルで指定されている場合を除いて、この引数は必須です。「カバレッジ インストゥルメンテーション ツール (cpptestcc) の設定」を参照
|
--@cpptest//:verbose | cpptestcc インストゥルメンテーションおよびコンパイルのすべてのステージで詳細なコンソール出力を有効化します。 |
--@cpptest//:quiet | 実行時に cpptest エンジンからのコンソール出力をすべて抑制します。 |
--@cpptest//:project-name=<NEW_PROJECT_NAME> | Eclipse プロジェクト ファイル .project および .parasoft の名前を変更します。 |
--@cpptest//:project-workspace=<PROJECT_WORKSPACE> | 解析およびレポートに使用する一時 Eclipse ワークスペースの場所を指定します。 |