警告メッセージの海を泳ぎ切る! CMake CTEST_CUSTOM_WARNING_MATCH で必要な情報だけを抽出


CTEST_CUSTOM_WARNING_MATCH は、CMakeの ctest_build() コマンドによってビルド出力から検出される警告メッセージを制御するための変数です。これは、特定の正規表現パターンに一致する警告メッセージのみをレポートするように、CTestテストフレームワークを構成するために使用されます。

構文

set(CTEST_CUSTOM_WARNING_MATCH regex1 regex2 ...)

説明

  • パターンは、Perl Compatible Regular Expressions (PCRE) 構文を使用する必要があります。
  • 複数の正規表現パターンを指定するには、スペースで区切ります。
  • regex1, regex2 ... は、警告メッセージと照合される正規表現パターンを表す文字列です。

set(CTEST_CUSTOM_WARNING_MATCH
  "^.*(deprecated|unnecessary).*")

この例では、deprecated または unnecessary という単語を含む警告メッセージのみがレポートされます。

CTEST_CUSTOM_WARNING_MATCH と CTEST_CUSTOM_WARNING_IGNORE の違い

CTEST_CUSTOM_WARNING_MATCH は、特定の警告メッセージをレポートするように CTest を構成するために使用されます。一方、CTEST_CUSTOM_WARNING_IGNORE は、特定の警告メッセージをレポートしないように CTest を構成するために使用されます。

CTEST_CUSTOM_WARNING_MATCH を使用する利点

  • テストスイートの信頼性を向上させることができます。
  • ビルド出力のノイズを減らすことができます。
  • 特定の警告メッセージにのみ焦点を当てることができます。
  • パターンが緩すぎると、不要な警告メッセージがレポートされてしまう可能性があります。
  • パターンが厳しすぎると、重要な警告メッセージを見逃してしまう可能性があります。
  • 正規表現パターンを正しく記述する必要があります。
  • 詳細については、CMake のドキュメントを参照してください。
  • この変数は、CTestCustom ファイル内で設定することもできます。
  • CTEST_CUSTOM_WARNING_MATCH は、CTest バージョン 2.8 以降で使用できます。


例 1:特定の警告メッセージのみをレポート

cmake_minimum_required(VERSION 3.1)

project(MyProject)

add_executable(MyProgram main.cpp)

set(CTEST_CUSTOM_WARNING_MATCH
  "^.*(deprecated|unnecessary).*")

ctest_test(MyProgram
  COMMAND ${CMAKE_EXE} -E cmake_run_tests)

例 2:CTESTCustom ファイルを使用

cmake_minimum_required(VERSION 3.1)

project(MyProject)

add_executable(MyProgram main.cpp)

set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY CTEST_CUSTOM_WARNING_MATCH
  "^.*(deprecated|unnecessary).*")

ctest_test(MyProgram
  COMMAND ${CMAKE_EXE} -E cmake_run_tests)

この例では、CTESTCustom ファイルを使用して CTEST_CUSTOM_WARNING_MATCH 変数を設定します。

例 3:複数の正規表現パターンを使用

cmake_minimum_required(VERSION 3.1)

project(MyProject)

add_executable(MyProgram main.cpp)

set(CTEST_CUSTOM_WARNING_MATCH
  "^.*(deprecated|unnecessary).*"
  "^.*(warning|error).*")

ctest_test(MyProgram
  COMMAND ${CMAKE_EXE} -E cmake_run_tests)

この例では、deprecated または unnecessary という単語を含む警告メッセージ、および warning または error という単語を含むすべての警告メッセージがレポートされます。

  • ctest_test() コマンドを使用して、テストスイートを実行します。
  • CTEST_CUSTOM_WARNING_MATCH 変数を使用して、レポートされる警告メッセージを制御します。
  • main.cpp という名前のソースファイルから MyProgram という名前の実行可能ファイルを作成します。
  • 上記の例では、MyProject という名前のプロジェクトを作成します。
  • 詳細については、CMake のドキュメントを参照してください。
  • 具体的なニーズに合わせてコードを調整する必要があります。
  • これらの例は、基本的な使用方法を示すものです。


サードパーティのライブラリを使用する

  • これらのライブラリは、CTEST_CUSTOM_WARNING_MATCH 変数よりも柔軟性と制御性に優れている場合があります。

カスタムテストランナーを作成する

  • ただし、独自のテストランナーを作成するには、時間と労力が必要です。
  • これは、複雑な要件がある場合や、既存のライブラリがニーズを満たしていない場合に役立ちます。
  • 独自のテストランナーを作成することで、警告メッセージのレポートを完全に制御することができます。

CMAKE_VERBOSE_OUTPUT を使用する

  • ただし、これは時間がかかり、エラーが発生しやすい方法です。
  • 警告メッセージを手動で確認して、必要なものだけをレポートすることができます。
  • これには、警告メッセージも含まれます。
  • CMAKE_VERBOSE_OUTPUT 変数を ON に設定すると、CMake はビルド出力に詳細な情報を表示します。

ビルドツールを変更する

  • ビルドツールの変更は、プロジェクト全体に大きな影響を与える可能性があるため、慎重に検討する必要があります。
  • CMake 以外のビルドツールを使用すると、警告メッセージのレポートを制御するための異なる方法が提供されている場合があります。

最適な代替方法の選択

最適な代替方法は、プロジェクトの要件とニーズによって異なります。

  • ビルドツールの変更は、最後の手段としてのみ検討してください。
  • 詳細な情報を必要とし、警告メッセージを手動で確認するのに構わない場合は、CMAKE_VERBOSE_OUTPUT を使用する方が良いでしょう。
  • より多くの制御と柔軟性が必要な場合は、カスタムテストランナーを作成することを検討してください。
  • シンプルで使いやすいソリューションが必要な場合は、サードパーティのライブラリを使用するのが良いでしょう。