このセクションでは、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 プロジェクトのコード カバレッジ収集を示すサンプル プロジェクトがあります。
要件
- CMake 3.10 以上および UNIX Makefiles または Ninja ジェネレーター
その他の前提条件
- CMake プロジェクトのコード カバレッジを収集するには、アプリケーションのフル ビルドを行う必要があります。インクリメンタル ビルドはサポートされていません。
- Windows では、スラッシュまたはバックスラッシュを使用した Windows パスで CMake プロジェクトおよびツールチェーンを設定する必要があります (例:
c:/folder/source.cppまたはc:\folder\source.cpp)。UNIX スタイルのパス (例:/c/folder/source.cpp) は、Windows ではサポートされていません。
ワークフローの概要
<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-coverage.cmakeを CMake プロジェクトにコピーします。cpptest-coverage.cmakeファイルのカバレッジ設定の詳細を確認し、必要に応じてオプションを更新します。 最低でも、CPPTEST_COMPILER_IDオプションで指定されたコンパイラ設定が使用しているコンパイラに一致していることを確認します。利用可能なオプションについては「Coverage Extension for CMake のカスタマイズ」を参照してください。メインの CMakeLists.txt ビルド ファイルに
cpptest-coverage.cmake拡張を含めます。コンパイラ/リンカー コマンドが自動的に変更されるよう、拡張はすべてのビルド ターゲット定義より前に置く必要があります。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に作成されます。アプリケーションを実行したり、機能テストまたは単体テストを実行したりします。
デフォルトでは、C/C++test のカバレッジ ログ ファイル (.clog) は<CMAKE_BINARY_DIR>/cpptest-coverage/<CMAKE_PROJECT_NAME>/<CMAKE_PROJECT_NAME>.clogに作成されます。cpptest_coverage_reportヘルパー ターゲットを実行してカバレッジ レポートを生成します。> make cpptest_coverage_report
次の場所にカバレッジ レポートが生成されます。
<CMAKE_BINARY_DIR>/cpptest-coverage/<CMAKE_PROJECT_NAME>/reportscpptest_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_10-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_OPTS | cpptestcc カバレッジ ツールのオプションを指定します。 |
さらに、以下を確認するとよいでしょう。
- カバレッジ レポートを生成するための
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/cmake の cpptest-coverage.cmake 拡張を使用するよう設定されています。
サンプル プロジェクトのカバレッジを収集するには、次の操作を行います。
- デフォルトの GNU GCC 10 (x64) 以外のコンパイラを使用している場合、
<CPPTEST_INSTALL_DIR>/integration/cmake/cpptest-coverage.cmakeを開き、使用しているコンパイラに合わせてCPPTEST_COMPILER_IDの値を変更します。 サンプル プロジェクトをビルドします。
> cd <CPPTEST_INSTALL_DIR>/examples/Timer > mkdir build > cd build > cmake -DCPPTEST_COVERAGE=ON -DCPPTEST_HOME=<CPPTEST_INSTALL_DIR> .. > make
アプリケーションを実行します。
> ./timer
カバレッジ レポートを生成します。
> make cpptest_coverage_report
<CPPTEST_INSTALL_DIR>/examples/Timer/build/cpptest-coverage/Timer/reportsにレポートが作成されます。