2013-04-22 159 views
34

我希望ctest默認向我顯示失敗的測試輸出。也就是說,我想運行:CMake:爲ctest設置環境變量(或者自動從ctest/make測試中獲取失敗的測試輸出)

$ 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)指定--output-on-failure標誌的ctest調用:

$ ctest --output-on-failure 

有沒有辦法編寫CMakeLists.txt文件,以便ctests轉儲失敗的測試輸出t在正常的「全部測試」調用而不是在會話中全局地輸出環境變量,或者採用像make check這樣的自定義目標(如描述的here)?

我知道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目標不能被修改,但可以添加自定義check目標與下列方式的--output-on-failure開關調用ctest

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 2013-04-23 08:08:44

+0

謝謝你,正是我在找的東西!任何想法爲什麼不可能修改'test'目標? – lfxgroove 2013-10-13 09:25:03

+0

'test'目標是CMake的全局默認目標之一,不能修改。在CMake源代碼中硬編碼設置'test'命令。 – sakra 2013-10-13 10:26:04