このセクションでは、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 ではサポートされていません。
ワークフローの概要
<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>/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_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 9 (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
にレポートが作成されます。