2013-04-22 14 views
34

デフォルトで失敗したテスト出力を表示します。CMake:ctestの環境変数を設定する(あるいはctest/testからテスト出力を自動的に取得する)

$ make all test 

をしてcat Testing/Temporary/LastTest.logにせずに失敗したテストのいずれかの出力を参照してください。つまり、私が実行したいです。

これを行うには二つの方法があることが表示されます。

(1)CTEST_OUTPUT_ON_FAILURE環境変数を設定する:

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

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

$ ctest --output-on-failure 

CMakeLists.txtファイルを作成して、ctestsダンプがdefaulによって出力されたテストに失敗するような方法はありますかセッション中に環境変数をグローバルにエクスポートするか、またはmake checkhereのように)のようなカスタムターゲットに頼らずに、通常の「すべてのテストを行う」呼び出しを実行しますか?

私は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収録がで実行されるシェル

答えて

22

ビルトインtestターゲットを変更することはできませんが、次のように--output-on-failureスイッチでctestを呼び出すカスタムcheckターゲットを追加することができます。

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() 

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

+0

ありがとうございました。便利なレシピ! – Jeet

+0

ヒープありがとう、ちょうど私が探していたもの!なぜ 'test'ターゲットを変更することができないのでしょうか? – lfxgroove

+0

'test'ターゲットは、変更できないCMakeのグローバルデフォルトターゲットの1つです。 'test'コマンドの設定は、CMakeソースでハードコードされています。 – sakra

関連する問題