ダッシュボードファイル処理をもっと自由に! 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_LOCATION
とCTEST_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
の代替方法が必要になる場合があります。