このセクションでは、C/C++test と Bazel ビルドを統合し、静的解析およびコード カバレッジの収集を行う方法を説明します。
Bazel のコード カバレッジ収集は、現時点では完全にはサポートされておらず、試験的機能です。 |
C/C++test をインストールしただけの状態では、Bazel ローカル リポジトリとして動作しません。次の手順に従って、C/C++test を Bazel のローカル リポジトリとして追加します。
Bazel WORKSPACE ファイルに次の記述を追加します (C/C++test のインストール ディレクトリに合わせてパスを変更してください)。
local_repository(name = "cpptest", path = "/opt/parasoft/cpptest") |
Bazel が BDF の生成を実行するには、テスト対象の cc_library または cc_binary がある BUILD ファイルにルールを追加する必要があります。たとえば、次の Bazel BUILD ファイルがあり、"hello-world" cc_binary ルールの BDF を生成するとします。
cc_library( name = "hello-greet", srcs = ["hello-greet.cc"], hdrs = ["hello-greet.h"], ) cc_binary( name = "hello-world", srcs = ["hello-world.cc"], deps = [ ":hello-greet", ], ) |
次の手順に従って Bazel での BDF 生成を登録します。
C/C++test が提供する Bazel 統合コードをインクルードします。それには、プロジェクトの BUILD ファイルに次の記述を追加します。
load("@cpptest//:integration/bazel/cpptest.bzl", "cpptest_generate_bdf") |
BDF を構成するターゲットのリストを作成します。
targets = [ "hello-world" ] |
ターゲットの後に次のルール宣言を追加し、BDF 生成ルールにターゲットを登録します。
cpptest_generate_bdf( name = "make_bdf", deps = targets, ) |
これで、cpptest_generate_bdf ルールが BUILD ファイルに登録されました。
BDF 生成ルールを実行するには、次のようなコマンドを入力します (この例では、gcc_10-64 コンパイラと上記の "hello-world" プロジェクトを使用しています)
bazel run //:make_bdf --@cpptest//:compiler-config=gcc_10-64 --@cpptest//:project-name=hello-world |
使用しているコンパイラとプロジェクトに合わせて compiler-config
および project-name
引数をカスタマイズします。
プロジェクトのルートに BDF が生成されます。
生成された BDF ファイルを使用した解析の実行
cpptestcli -config "builtin://Recommended Rules" -module . -input hello-world.bdf -compiler gcc_10-64 |
|
プロジェクトの BUILD ファイルでターゲット実行ファイルにコード カバレッジを追加するには、ファイルに新規ルールを追加する必要があります。
BUILD ファイルの次の行を変更します。
load("@cpptest//:integration/bazel/cpptest.bzl", "cpptest_generate_bdf") |
次のように変更します。
load("@cpptest//:integration/bazel/cpptest.bzl", "cpptest_generate_bdf", "cpptest_code_coverage_executable" ) |
ファイルに新規ルールを追加します。
cpptest_code_coverage_executable( name = "code_cov", # This can be any name deps = targets, # Reuse the list of targets from BDF generation ) |
次の手順に従って、インストゥルメントされたバイナリを生成します。
行カバレッジを指定します。それには、Bazel の run コマンドに新しいオプションを追加します。オプションの指定によって、行カバレッジを有効にして実行ファイルをインストゥルメントするよう cpptestcc に指示します。
bazel run //:code_cov --@cpptest//:compiler-config=gcc_10-64 --@cpptest//:line-coverage |
|
インストゥルメントされたバイナリを実行します。
./bazel-bin/hello-world.elf |
カバレッジ レポートを生成します。
cpptestcli -config builtin://Coverage -module . -input cpptest_results.clog |
オプション | 説明 |
---|---|
--@cpptest//:compiler-config=<COMPILER-CONFIGURATION-NAME> | C/C++test の Bazel 統合を構成するルールにコンパイラ コンフィギュレーション名を渡します。このオプションをコマンド ラインで常に指定することを推奨します。デフォルトでは、コンパイラ コンフィギュレーションには、説明のための無効な値が設定されています。 |
--@cpptest//:project-name=<NEW-PROJECT-NAME> | 生成される BDF ファイルの名前を指定します。WORKSPACE ファイルに明示的に名前が指定されている場合、常にその名前が使用されます。このオプションがコマンド ラインで明示的に指定されていない (そして WORKSPACE で明示的に名前が指定されていない) 場合、ワークスペースのルートを含むフォルダー名が使用されます。 たとえば、ワークスペースのルートへのパスが /foo の場合、プロジェクト名は foo になります。 |
--@cpptest//:line-coverage | 行カバレッジを有効にします。 |