【初心者向け】CMake でコードカバレッジを簡単設定! CTEST_COVERAGE_EXTRA_FLAGS を使いこなそう
この変数の利点
- コードカバレッジツールの設定: 使用しているコードカバレッジツールに固有のフラグを指定できます。
- テストスイートのカバレッジ範囲の向上: テストスイート全体のカバレッジ範囲を向上させるために、特定のファイルや関数を除外するフラグを指定できます。
- コードカバレッジレポートのカスタマイズ: 特定のニーズに合わせたレポートを生成するために、追加のフラグを指定できます。
CTEST_COVERAGE_EXTRA_FLAGS の使用方法
この変数は、ctest(1)
コマンドラインツールまたは CMakeLists.txt ファイル内の ctest
コマンドを使用して設定できます。
例
ctest --property CTEST_COVERAGE_EXTRA_FLAGS "-g --exclude-source /path/to/exclude"
上記の例では、-g
フラグが CTest に渡され、ソースコードの行カバレッジレポートが生成されます。 また、/path/to/exclude
ディレクトリ内のすべてのファイルがレポートから除外されます。
CMakeLists.txt ファイル内での設定
set(CTEST_COVERAGE_EXTRA_FLAGS "-g --exclude-source /path/to/exclude")
上記の例では、CTEST_COVERAGE_EXTRA_FLAGS
変数が -g --exclude-source /path/to/exclude
に設定されます。 これにより、CTest が実行されるたびに、上記の例と同様の効果が得られます。
--exclude-line
: 特定の行をレポートから除外します。--exclude-source
: 特定のファイルをレポートから除外します。-b
: ブランチカバレッジレポートを生成します。-f
: 関数カバレッジレポートを生成します。-g
: 行カバレッジレポートを生成します。
例 1: 行カバレッジレポートとソースコードの除外
cmake_minimum_required(VERSION 3.10)
project(myproject)
add_executable(mytarget mycode.cpp)
target_link_libraries(mytarget mylib)
set(CTEST_COVERAGE_EXTRA_FLAGS "-g --exclude-source /path/to/exclude")
ctest_test(mytest
COMMAND mytarget
)
この例では、以下のことが行われます。
- CMake のバージョン 3.10 以降が必要であることを指定します。
myproject
という名前のプロジェクトを作成します。mycode.cpp
ファイルからmytarget
という名前の実行可能ファイルを作成します。mytarget
がmylib
ライブラリにリンクされるようにします。CTEST_COVERAGE_EXTRA_FLAGS
変数を-g --exclude-source /path/to/exclude
に設定します。 これにより、行カバレッジレポートが生成され、/path/to/exclude
ディレクトリ内のすべてのファイルがレポートから除外されます。mytest
という名前のテストを作成し、mytarget
実行可能ファイルをコマンドとして実行します。
このテストを実行すると、CTest は /path/to/exclude
ディレクトリを除いた mycode.cpp
ファイルの行カバレッジレポートを生成します。
例 2: 関数カバレッジレポートとブランチカバレッジレポート
cmake_minimum_required(VERSION 3.10)
project(myproject)
add_executable(mytarget mycode.cpp)
target_link_libraries(mytarget mylib)
set(CTEST_COVERAGE_EXTRA_FLAGS "-f -b")
ctest_test(mytest
COMMAND mytarget
)
- CMake のバージョン 3.10 以降が必要であることを指定します。
myproject
という名前のプロジェクトを作成します。mycode.cpp
ファイルからmytarget
という名前の実行可能ファイルを作成します。mytarget
がmylib
ライブラリにリンクされるようにします。CTEST_COVERAGE_EXTRA_FLAGS
変数を-f -b
に設定します。 これにより、関数カバレッジレポートとブランチカバレッジレポートが生成されます。mytest
という名前のテストを作成し、mytarget
実行可能ファイルをコマンドとして実行します。
このテストを実行すると、CTest は mycode.cpp
ファイルの関数カバレッジレポートとブランチカバレッジレポートを生成します。
- 使用しているコードカバレッジツールによっては、独自のフラグが必要になる場合があります。
- 上記の例はあくまで基本的な例であり、ニーズに合わせて変更する必要があります。
コードカバレッジツール固有のオプションを使用する
多くのコードカバレッジツールは、CMake 以外の方法で設定できるオプションを提供しています。 これらのオプションを使用して、レポートのカスタマイズや特定のファイルの除外を行うことができます。 コードカバレッジツールのドキュメントを参照して、使用できるオプションを確認してください。
CMake ターゲットプロパティを使用する
CMake ターゲットプロパティを使用して、コードカバレッジツールの設定を指定することもできます。 これにより、CTEST_COVERAGE_EXTRA_FLAGS 変数を使用するよりも、コードをよりクリーンで整理しやすくなります。
例
cmake_minimum_required(VERSION 3.10)
project(myproject)
add_executable(mytarget mycode.cpp)
target_link_libraries(mytarget mylib)
target_compile_features(mytarget CXX_COVERAGE)
set_property(TARGET mytarget PROPERTY COVERAGE_FLAGS "-g --exclude-source /path/to/exclude")
ctest_test(mytest
COMMAND mytarget
)
上記の例では、以下のことが行われます。
- CMake のバージョン 3.10 以降が必要であることを指定します。
myproject
という名前のプロジェクトを作成します。mycode.cpp
ファイルからmytarget
という名前の実行可能ファイルを作成します。mytarget
がmylib
ライブラリにリンクされるようにします。mytarget
ターゲットにCXX_COVERAGE
ターゲットプロパティを設定します。 これにより、ターゲットがコードカバレッジ情報でコンパイルされるようになります。mytarget
ターゲットのCOVERAGE_FLAGS
プロパティを-g --exclude-source /path/to/exclude
に設定します。 これにより、行カバレッジレポートが生成され、/path/to/exclude
ディレクトリ内のすべてのファイルがレポートから除外されます。mytest
という名前のテストを作成し、mytarget
実行可能ファイルをコマンドとして実行します。
この例では、CTEST_COVERAGE_EXTRA_FLAGS 変数ではなく、ターゲットプロパティを使用してコードカバレッジ設定を指定しています。
CTest カスタムテストドライバーを使用する
CTest カスタムテストドライバーを使用して、コードカバレッジレポートの生成を完全に制御することもできます。 これにより、CTEST_COVERAGE_EXTRA_FLAGS 変数やターゲットプロパティよりも柔軟な方法でレポートをカスタマイズすることができます。
別のテストフレームワークを使用する
CMake 以外のテストフレームワークを使用することもできます。 多くのテストフレームワークは、組み込みのコードカバレッジ機能を提供しています。
- コードの保守性
- コードをどれだけ柔軟にカスタマイズしたいか
- 使用しているコードカバレッジツール