2013-04-22 15 views
34

Ctest'in varsayılan olarak başarısız test sonuçlarını göstermesini istiyorum.CMake: ctest için bir çevre değişkeni ayarı (veya aksi takdirde ctest/make testinden otomatik olarak başarısız test çıktısı alınıyor)

$ make all test 

ve cat Testing/Temporary/LastTest.log zorunda kalmadan başarısız testlerin herhangi bir çıktı bkz: yani, ben çalıştırmak istiyorum.

yapmanın iki yolu vardır göründüğü:

(1) CTEST_OUTPUT_ON_FAILURE çevre değişkeni ayarlanması:

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

(2) ctest çağırma --output-on-failure bayrağı belirtme:

$ ctest --output-on-failure 

Bir CMakeLists.txt dosyası yazmanın, ctests dökümlerinin başarısız olduğu testlerin başarısız olduğu bir yol var mı? Çevresel değişkenleri oturumda global olarak ihraç etmek veya make check (here açıklandığı gibi) gibi özel bir hedefe başvurmaktan kaçınmaktan normal bir "tüm testi yap" çağırma?

Ben SET_TESTS_PROPERTIES() komuta farkındayım, ancak bu şekilde deneyerek:

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

ve çevresel değişken değil de, test programı çalıştırılır kabukta ayarlandığını gösterir denemeler o ctest çalıştırılır shell

cevap

22

yerleşik test hedefe değiştirilemez, ancak aşağıdaki şekilde --output-on-failure anahtarı ile ctest çağıran özel bir check hedef ekleyebilirsiniz:.

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

Özel hedef, tek yapı türü ve çoklu yapılandırma için farklı şekilde ayarlanmış olmalıdır. Sonraki durumda, --build-config bayrağını kullanarak etkin yapı yapılandırmasının ctest çağrısına geçirilmesi gerekir. --force-new-ctest-process, dahili test hedef tarafından varsayılan olarak kullanılır.

+0

Teşekkürler. Faydalı yemek tarifi! – Jeet

+0

Bir yığın, tam olarak aradığım şey için teşekkürler! 'Test' hedefini değiştirmek mümkün olmadığına dair bir fikriniz var mı? – lfxgroove

+0

'Test' hedefi, değiştirilemeyen CMake'in genel varsayılan hedeflerinden biridir. CMake kaynağında kodlanmış olarak 'test' komutunun kurulması. – sakra

İlgili konular