43

ctest に、デフォルトで失敗したテストの出力を表示してもらいたいです。つまり、実行したい:

$ make all test

失敗したテストの出力を確認する必要はありませんcat Testing/Temporary/LastTest.log

これを行うには、次の 2 つの方法があるようです。

(1)CTEST_OUTPUT_ON_FAILURE環境変数の設定:

 $ CTEST_OUTPUT_ON_FAILURE=1 make all test
 $ # or CTEST_OUTPUT_ON_FAILURE=1 ctest

(2)呼び出しに--output-on-failureフラグを指定する:ctest

 $ ctest --output-on-failure

CMakeLists.txt ファイルを記述して、ctests が通常の「make all test」呼び出しでデフォルトで失敗したテストの出力をダンプするように、セッションで環境変数をグローバルにエクスポートしたり、カスタムターゲットに頼ったりすることなくmake check(説明されているように) 書き込む方法はありますか?ここで)?

私はSET_TESTS_PROPERTIES()コマンドを知っていますが、次のように試してみてください:

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(testenv CXX)
ENABLE_TESTING()
ADD_EXECUTABLE(hello hello.cpp)
ADD_TEST(testhello hello)

# Following sets the environment variable for the shell in which the test
# progoram 'hello' is run, but not the shell in which ctest is run
SET_TESTS_PROPERTIES(testhello
    PROPERTIES ENVIRONMENT "CTEST_OUTPUT_ON_FAILURE=1")

実験では、テスト プログラムが実行されるシェルでは環境変数が設定されているが、ctest が実行されているシェルでは設定されていないことが示されています。

4

2 に答える 2

31

組み込みのtestターゲットは変更できませんが、次の方法でスイッチで呼び出すcheckカスタム ターゲットを追加できます。ctest--output-on-failure

if (CMAKE_CONFIGURATION_TYPES)
    add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} 
        --force-new-ctest-process --output-on-failure 
        --build-config "$<CONFIGURATION>")
else()
    add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND} 
        --force-new-ctest-process --output-on-failure)
endif()

カスタム ターゲットは、単一のビルド タイプと複数構成のビルドで別々に設定する必要があります。後者の場合、フラグctestを使用して、アクティブなビルド構成を呼び出しに渡す必要があります。--build-config--force-new-ctest-process、組み込みtestターゲットによってデフォルトで使用されます。

于 2013-04-23T07:12:06.673 に答える