このセクションでは、C/C++test Standard に付属の CMake 拡張を使用して CMake プロジェクトのアプリケーション カバレッジを収集する方法を説明します。

はじめに

C/C++test には、C/C++test のコードカバレッジ解析を直接 CMake プロジェクトに統合するための CMake 用拡張が付属しています。拡張機能は自動的にコンパイラ/リンカー コマンド ラインを変更し、プロジェクトのビルド時に cpptestcc カバレッジ ツールを使用します。結果として、インストゥルメントされたアプリケーションを実行したり、機能テストまたは単体テストを実行すると、C/C++test のカバレッジ ログ ファイル (.clog) が作成されます。その後、カバレッジ ログ ファイルを使用して完全なコード カバレッジ レポートを生成できます。

CMake 統合のサポートには以下が含まれます。

  • <CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-coverage.cmake 拡張 – CMake 用 C/C++test 拡張ファイルです。CMakeFiles.txt ビルド ファイルにこれを追加する必要があります。
  • CPPTEST_COVERAGE=ON および CPPTEST_HOME=<CPPTEST_INSTALL_DIR> オプション – CMake を使用してアプリケーションをビルドする際に拡張をアクティベートするために提供されているオプションです。
  • cpptest_coverage_report ターゲット – .clog ファイルを入力としてカバレッジ レポートを生成するために提供されているターゲットです。

<CPPTEST_INSTALL_DIR>/examples/Timer ディレクトリには、CMake プロジェクトのコード カバレッジ収集を示すサンプル プロジェクトがあります。

要件

  • Unix Makefiles または Ninja ジェネレーターを備えた CMake 3.10 以降

その他の前提条件

  • CMake プロジェクトのコード カバレッジを収集するには、アプリケーションのフル ビルドを行う必要があります。インクリメンタル ビルドはサポートされていません。
  • Windows では、スラッシュまたはバックスラッシュを使用した Windows パスで CMake プロジェクトおよびツールチェーンを設定する必要があります (例: c:/folder/source.cpp または c:\folder\source.cpp)。Unix スタイルのパス (例: /c/folder/source.cpp) は、Windows ではサポートされていません。

ワークフローの概要

  1. <CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-coverage.cmake を CMake プロジェクトにコピーします。

  2. cpptest-coverage.cmake ファイルのカバレッジ設定の詳細を確認し、必要に応じてオプションを更新します。  最低でも、 CPPTEST_COMPILER_ID オプションで指定されたコンパイラ設定が使用しているコンパイラに一致していることを確認します。利用可能なオプションについては「Coverage Extension for CMake のカスタマイズ」を参照してください。

  3. メインの CMakeLists.txt ビルド ファイルに cpptest-coverage.cmake 拡張を含めます。コンパイラ/リンカー コマンドが自動的に変更されるよう、拡張はすべてのビルド ターゲット定義より前に置く必要があります。

  4. CMake プロジェクトを設定およびビルドする際に、CPPTEST_COVERAGE および CPPTEST_HOME オプションを使用して拡張をアクティブにします。

    > cmake -DCPPTEST_COVERAGE=ON -DCPPTEST_HOME=<CPPTEST_INSTALL_DIR> ..

    デフォルトでは、C/C++test のカバレッジ データは  <CMAKE_BINARY_DIR>/cpptest-coverage/<CMAKE_PROJECT_NAME>/.cpptest に作成されます。

  5. アプリケーションを実行したり、機能テストまたは単体テストを実行したりします。
    デフォルトでは、C/C++test のカバレッジ ログ ファイル (.clog) は <CMAKE_BINARY_DIR>/cpptest-coverage/<CMAKE_PROJECT_NAME>/<CMAKE_PROJECT_NAME>.clog に作成されます。

  6. cpptest_coverage_report ヘルパー ターゲットを実行してカバレッジ レポートを生成します。

    > make cpptest_coverage_report

    次の場所にカバレッジ レポートが生成されます。<CMAKE_BINARY_DIR>/cpptest-coverage/<CMAKE_PROJECT_NAME>/reports

    cpptest_coverage_report ターゲットを使用してカバレッジ レポートを生成することを推奨します。別の方法として、.clog ファイルを入力とし、Coverage テスト コンフィギュレーションを指定して cpptestcli を使用することもできます。

    > cd <CMAKE_BINARY_DIR>/cpptest-coverage/<CMAKE_PROJECT_NAME> > cpptestcli -config "builtin://Coverage" -input <CMAKE_PROJECT_NAME>.clog

Coverage Extension for CMake のカスタマイズ

C/C++test 拡張を使用したカバレッジの収集をカスタマイズするには、CMake プロジェクトにコピーした cpptest-coverage.cmake ファイルを開いて C/C++test オプションを変更します。 

オプション名説明デフォルト
CPPTEST_COMPILER_ID

使用しているコンパイラに一致するコンパイラ構成を指定します。

gcc_9-64
 CPPTEST_COVERAGE_TYPE_FLAGS カバレッジ タイプを指定します。利用可能なオプションについては「cpptestcc コマンド ライン リファレンス」を参照してください。-optimized-line-coverage
CPPTEST_COVERAGE_WORKSPACEデフォルトで C/C++test のカバレッジ データ ファイルが保存されるカバレッジ ツールのワークスペースへのパスを指定します。<CMAKE_BINARY_DIR>/cpptest-coverage/<CMAKE_PROJECT_NAME>
CPPTEST_COVERAGE_LOG_FILE

C/C++test カバレッジ ログ ファイル (.clog) の名前と場所を指定します。

重要: インストゥルメント済みアプリケーションを実行する前に、カバレッジ ログ ディレクトリが存在することを確認する必要があります。

<CPPTEST_COVERAGE_WORKSPACE>/<CMAKE_PROJECT_NAME>.clog
CPPTEST_CPPTESTCC_OPTScpptestcc カバレッジ ツールのオプションを指定します。

さらに、以下を確認するとよいでしょう。

  • カバレッジ レポートを生成するための cpptestcli のパラメーターを指定するcpptest_coverage_report ターゲットの定義
  • # Build C/C++test coverage runtime library セクション。このセクションには、C/C++test のランタイム ライブラリの設定が含まれます (ライブラリはカバレッジ拡張によって自動的にビルドされます)。
  • CPPTEST_LINKER_FLAGS オプション。このオプションは、C/C++test カバレッジ ランタイムのリンク方法を定義します。

Coverage Extension と CMake の統合のサンプル

このセクションでは、C/C++test の CMake カバレッジ拡張を使用して <CPPTEST_INSTALL_DIR>/examples/Timer ディレクトリにあるサンプル プロジェクトのカバレッジを収集する方法を示します。Timer プロジェクトは、<CPPTEST_INSTALL_DIR>/integration/cmakecpptest-coverage.cmake 拡張を使用するよう設定されています。

サンプル プロジェクトのカバレッジを収集するには、次の操作を行います。

  1. デフォルトの GNU GCC 9 (x64) 以外のコンパイラを使用している場合、<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-coverage.cmake を開き、使用しているコンパイラに合わせて CPPTEST_COMPILER_ID の値を変更します。
  2. サンプル プロジェクトをビルドします。

    > cd <CPPTEST_INSTALL_DIR>/examples/Timer > mkdir build > cd build > cmake -DCPPTEST_COVERAGE=ON -DCPPTEST_HOME=<CPPTEST_INSTALL_DIR> .. > make
  3. アプリケーションを実行します。

    > ./timer
  4. カバレッジ レポートを生成します。

    > make cpptest_coverage_report

    <CPPTEST_INSTALL_DIR>/examples/Timer/build/cpptest-coverage/Timer/reports にレポートが作成されます。


  • No labels