概要

このセクションでは、C/C++test と Bazel ビルドを統合し、静的解析およびコード カバレッジの収集を行う方法を説明します。

要件

C/C++test を Bazel のローカル リポジトリとして追加する

C/C++test をインストールしただけの状態では、Bazel ローカル リポジトリとして動作しません。次の手順に従って、C/C++test を Bazel のローカル リポジトリとして追加します。

  1. C/C++test インストール ディレクトリの integration/bazel ディレクトリにある WORKSPACE.bazel および BUILD.bazel ファイルをインストール ディレクトリの直下に移動します。
    cd <INSTALL_DIR>
    mv integration/bazel/WORKSPACE.bazel .
    mv integration/bazel/BUILD.bazel .
    注意: ファイルが移動され、integration/bazel ディレクトリにコピーが残っていないことを確認します。
  2. プロジェクトのルートにある Bazel WORKSPACE ファイルを開きます。
  3. 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 ファイルの生成

  1. "@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 プロジェクトとして開くのに必要なファイルも生成されます。

  2. プロジェクトを Eclipse ワークスペースにインポートして解析を実行します。

    cpptestcli -data /path/to/workspace -import . -config "builtin://Recommended Rules"
    • BDF を生成しても、実行ファイル、オブジェクト、生成済みソースなどのプロジェクト成果物は作成されません。
    • プロジェクトに対して自動生成されたコードは、bazel-build サブディレクトリに配置されます。
    • bazel clean を実行すると、このディレクトリの内容が削除され、BDF が無効になります。
    • ターゲットを再ビルドすると、BDF 内の不足している参照が解決されます。

コード カバレッジが有効な実行ファイルの生成

次の手順に従ってコード カバレッジ インストゥルメンテーションを含むバイナリ コードを生成します。 

  1. "@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 との統合はインストゥルメントされたバイナリを実行しません。
  2. インストゥルメントされたバイナリを実行します。

    ./bazel-bin/hello-world.elf
  3. プロジェクトを Eclipse ワークスペースにインポートしてカバレッジ レポートを生成します。

    cpptestcli -data /path/to/workspace -import . -config "builtin://Load Application Coverage"

注意:

カバレッジ インストゥルメンテーション ツール (cpptestcc) の設定

.psrc 設定ファイルを使用してカバレッジ インストゥルメンテーション ツール (cpptestcc) を設定できます。

  1. プロジェクトにサンプル .psrc ファイルをコピーします。

    cp <INSTALL_DIR>/integration/bazel/cpptestcc-bazel.psrc <PROJECT_ROOT>/cpptestcc-bazel.psrc
  2. 必要に応じて cpptestcc-bazel.psrc の内容を変更します。オプションの一覧については、「cpptestcc コマンド ライン リファレンス」を参照するか、次のコマンドを実行してください。
    cpptestcc -help
  3. BUILD.bazel ファイルに "cpptestcc-bazel-psrc" ファイルグループを定義し、cpptestcc-bazel.psrc ファイルを参照します。

    filegroup(name = "cpptestcc-bazel-psrc", srcs = ["cpptestcc-bazel.psrc"], visibility = ["//visibility:public"])
  4. "@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_*" タイプまたはその派生タイプのプロジェクト ルールを指定する必要があります。
デフォルト値: None
例: --@cpptest//:target=//main:hello-world

--@cpptest//:psrc_file=<CUSTOM_PSRC_FILEGROUP>

.psrc 設定ファイルのファイルグループを指定します。「カバレッジ インストゥルメンテーション ツール (cpptestcc) の設定」を参照。
デフォルト値: None
例: --@cpptest//:psrc_file=//:cpptestcc-bazel-psrc

このオプションを使用する前に、BUILD.bazel ファイルに .psrc 設定ファイルを参照するファイルグループを定義します。例:
filegroup(name = "cpptestcc-bazel-psrc", srcs = ["cpptestcc-bazel.psrc"], visibility = ["//visibility:public"])
詳細は <INSTALL_DIR>/integration/bazel/cpptestcc-bazel.psrc ファイルを参照してください。

"@cpptest//:bdf" ルール引数

オプション説明
--@cpptest//:project-name=<NEW_PROJECT_NAME>

生成される BDF ファイルの名前を変更します。
デフォルト値: "$(basename $(bazel info workspace))" -WORKSPACE ファイルがあるディレクトリの名前です。
例: --@cpptest//:project-name="foo"
bdf ターゲットを実行すると、"foo.bdf" ファイルが生成されます。

--@cpptest//:missing-bazel-dirs="external","<DIRS>"

解析時に見つかったディレクトリへのパスの先頭を指定します。BDF 内では、このパスの前に "bazel-[project-name]" が付加されます。
デフォルト値: "external" (必須)
例: --@cpptest//:missing-bazel-dirs="external","another_includes_dir"
解析時に見つかったすべての "external" または "another_includes_dir" で始まるディレクトリのパスの前に BDF では "bazel-[project-name]" を付加します。

"@cpptest//:coverage" ルール引数

オプション説明
--@cpptest//:compiler-config=<COMPILER_CONFIGURATION_NAME>

コンパイラ設定を指定します。
.psrc ファイルでコンパイル設定が指定されている場合を除いて、この引数は必須です。「カバレッジ インストゥルメンテーション ツール (cpptestcc) の設定」を参照。
デフォルト値: None
例: --@cpptest//:compiler-config=clang_12_0

--@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 インストゥルメンテーションおよびコンパイルのすべてのステージで詳細なコンソール出力を有効化します。
デフォルト値: False

--@cpptest//:quiet

実行時に cpptest エンジンからのコンソール出力をすべて抑制します。
デフォルト値: False

--@cpptest//:project-name=<NEW_PROJECT_NAME>

Eclipse プロジェクト ファイル .project および .parasoft の名前を変更します。
デフォルト値: "$(basename $(bazel info workspace))" -WORKSPACE ファイルがあるディレクトリの名前です。
例: --@cpptest//:project-name="foo"
最上位ディレクトリの .project ファイルには次が含まれます: "<name>foo</name>"
最上位ディレクトリの .parasoft ファイルには次が含まれます: "project.path=/foo"
/foo//...  - プロジェクトのコンフィギュレーション エントリ

--@cpptest//:project-workspace=<PROJECT_WORKSPACE>

解析およびレポートに使用する一時 Eclipse ワークスペースの場所を指定します。
デフォルト値: /tmp
例: --@cpptest//:project-workspace=/tmp/project_name