ダッシュボードファイル処理をもっと自由に! CMake の CTEST_DROP_METHOD と代替方法


CTEST_DROP_METHOD は、CMake の ctest(1) ダッシュボードクライアントスクリプトで使用される変数です。これは、テスト実行後に生成されたダッシュボードファイルの処理方法を制御するために使用されます。

利用方法

CTEST_DROP_METHOD には、以下の3つの値を設定できます。

  • drop
    テスト実行後に生成されたダッシュボードファイルを削除します。
  • link
    テスト実行後に生成されたダッシュボードファイルへのリンクを生成します。
  • copy
    テスト実行後に生成されたダッシュボードファイルを指定された場所にコピーします。

設定例

ctest(
  ...
  DROP_METHOD copy
  DROP_LOCATION /path/to/copy/dashboard/files
)

上記の例では、テスト実行後に生成されたダッシュボードファイルは /path/to/copy/dashboard/files ディレクトリにコピーされます。

  • CTEST_DROP_METHOD は、CTEST_DROP_LOCATIONCTEST_DROP_SITE 変数と併用できます。
  • CTEST_DROP_METHOD は、CMake バージョン 3.1 以降でのみ使用できます。

プログラミング上の注意点

  • CTEST_DROP_METHOD を使用すると、ダッシュボードファイルが削除される可能性があることに注意してください。
  • CTEST_DROP_METHOD を使用するときは、ダッシュボードファイルの処理方法がどのように変更されるかを理解する必要があります。

以下の例は、テスト実行後に生成されたダッシュボードファイルを /path/to/copy/dashboard/files ディレクトリにコピーし、ダッシュボードサイトを /path/to/dashboard/site に設定する方法を示しています。

ctest(
  ...
  DROP_METHOD copy
  DROP_LOCATION /path/to/copy/dashboard/files
  DROP_SITE /path/to/dashboard/site
)

この例では、テスト実行後に生成されたダッシュボードファイルは /path/to/copy/dashboard/files ディレクトリにコピーされ、ダッシュボードは /path/to/dashboard/site で表示されます。



テスト実行後に生成されたダッシュボードファイルを /path/to/copy/dashboard/files ディレクトリにコピーする

cmake_minimum_required(VERSION 3.1)

project(MyProject)

add_executable(MyProgram main.cpp)

ctest_test(MyProgram)

ctest(
  DROP_METHOD copy
  DROP_LOCATION /path/to/copy/dashboard/files
)

テスト実行後に生成されたダッシュボードファイルへのリンクを生成する

cmake_minimum_required(VERSION 3.1)

project(MyProject)

add_executable(MyProgram main.cpp)

ctest_test(MyProgram)

ctest(
  DROP_METHOD link
)

テスト実行後に生成されたダッシュボードファイルを削除する

cmake_minimum_required(VERSION 3.1)

project(MyProject)

add_executable(MyProgram main.cpp)

ctest_test(MyProgram)

ctest(
  DROP_METHOD drop
)

ダッシュボードファイルをコピーし、ダッシュボードサイトを設定する

cmake_minimum_required(VERSION 3.1)

project(MyProject)

add_executable(MyProgram main.cpp)

ctest_test(MyProgram)

ctest(
  DROP_METHOD copy
  DROP_LOCATION /path/to/copy/dashboard/files
  DROP_SITE /path/to/dashboard/site
)
cmake_minimum_required(VERSION 3.1)

project(MyProject)

add_executable(MyProgram1 main1.cpp)
add_executable(MyProgram2 main2.cpp)

ctest_test(MyProgram1)
ctest_test(MyProgram2)

ctest(
  DROP_METHOD copy
  DROP_LOCATION_FOR(MyProgram1 /path/to/copy/dashboard/files/program1)
  DROP_LOCATION_FOR(MyProgram2 /path/to/copy/dashboard/files/program2)
)


しかし、いくつかの状況では、CTEST_DROP_METHOD の代替方法が必要になる場合があります。

特定の条件下でのみダッシュボードファイルを処理したい場合

CTEST_DROP_METHOD は、テスト実行後に常にダッシュボードファイルを処理します。しかし、特定の条件下でのみダッシュボードファイルを処理したい場合は、if ステートメントを使用して処理を制御することができます。

ctest_test(MyProgram)

if(TEST_SUCCEEDED)
  ctest(
    DROP_METHOD copy
    DROP_LOCATION /path/to/copy/dashboard/files
  )
endif()

上記の例では、MyProgram テストが成功した場合のみ、ダッシュボードファイルが /path/to/copy/dashboard/files ディレクトリにコピーされます。

独自のダッシュボード処理ロジックを実装したい場合

CTEST_DROP_METHOD は、ダッシュボードファイルを単純にコピー、リンク、または削除する機能のみを提供します。しかし、独自のダッシュボード処理ロジックを実装したい場合は、ctest_message コマンドを使用してダッシュボード情報を出力し、独自のスクリプトを使用して処理することができます。

ctest_test(MyProgram)

ctest_message(STATUS "Dashboard information:"
  "Test name: ${CTEST_TEST_NAME}"
  "Test result: ${CTEST_TEST_RESULT}"
  "Test output: ${CTEST_TEST_OUTPUT}"
)

# 独自のダッシュボード処理ロジックを実装するスクリプトを実行する
execute_script(process_dashboard.sh ${CTEST_TEST_NAME} ${CTEST_TEST_RESULT} ${CTEST_TEST_OUTPUT})

上記の例では、MyProgram テストの実行結果を ctest_message コマンドを使用して出力し、process_dashboard.sh スクリプトを使用して独自のダッシュボード処理を実行します。

複数のダッシュボードフォーマットをサポートしたい場合

CTEST_DROP_METHOD は、デフォルトで XML 形式のダッシュボードファイルを処理します。しかし、HTML 形式などの他のダッシュボードフォーマットをサポートしたい場合は、ctest_write_coverage コマンドを使用してカバレッジデータを別の形式で出力し、独自のスクリプトを使用して処理することができます。

ctest_test(MyProgram)

ctest_write_coverage(html OUTPUT /path/to/html/coverage/report.html)

# 独自のダッシュボード処理ロジックを実装するスクリプトを実行する
execute_script(process_dashboard.sh /path/to/html/coverage/report.html)

上記の例では、MyProgram テストのカバレッジデータを HTML 形式で出力し、process_dashboard.sh スクリプトを使用して独自のダッシュボード処理を実行します。

CTEST_DROP_METHOD は、CMake の ctest(1) ダッシュボードクライアントスクリプトでダッシュボードファイルを処理するための便利なツールです。

しかし、特定の状況では、if ステートメント、独自のスクリプト、または他の CMake コマンドを使用して、CTEST_DROP_METHOD の代替方法が必要になる場合があります。