2014-01-09 4 views
1

Недавно я начал изучать cmake и столкнулся с небольшой проблемой. Я получил как свои исполняемые, так и модульные тесты для компиляции из сгенерированного файла makefile без проблем. Если я запустил ./test в каталоге сборки, тесты, созданные в UnitTest ++, выполняются и завершаются, как ожидалось, распечатывая результаты. Есть ли способ получить make test, чтобы просто запустить тестовый исполняемый файл, а не запускать его внутри рамки ctest, или я должен идти об этом по-другому?Вызов Unittest ++ из созданного make-файла cmake

Вот минимальный рабочий пример моего кода:

SRC/главная/main.c является простой пуст основной функцией

SRC/тест/testMain.cpp:

#include <UnitTest++/UnitTest++.h> 

TEST(FailSpect) 
{ 
    CHECK(false); 
} 

int main() 
{ 
    UnitTest::RunAllTests(); 
} 

CMakeLists.txt:

cmake_minimum_required(VERSION 2.6) 
project(myProject) 

enable_testing() 

set(myProjectMain 
    src/main/main.c 
    ) 

set(myProjectSrc 
    ) 

set(myProjectTestSrc 
    src/test/testMain.cpp 
    ) 

add_executable(myExecutable ${myProjectMain} ${myProjectSrc}) 
add_executable(testSuite ${myProjectTestSrc} ${myProjectSrc}) 

target_link_libraries(testSuite UnitTest++) 

add_test(testExe testSuite) 

make test выход:

Running tests... 
Start processing tests 
Test project /myProjectDir/build 
    1/ 1 Testing testExe      Passed 

100% tests passed, 0 tests failed out of 1 

./testSuite выход:

/myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false 
FAILURE: 1 out of 1 tests failed (1 failures). 
Test time: 0.00 seconds. 

ответ

1

Я выяснял, как сделать это. Сначала удалите строки:

enable_testing() 

и

add_test(testExe testSuite) 

и заменить их на линии:

add_custom_target(test ./testExe 
    DEPENDS ./testExe) 

в конце файла CMakeLists.txt. Теперь make (all) строит как тесты, так и основную программу. Если все построено уже, то make test будет просто проверить, что тесты построены и запустить их производство:

[100%] Built target testExe 
/myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false 
FAILURE: 1 out of 1 tests failed (1 failures). 
Test time: 0.00 seconds. 
[100%] Built target test 

Если тесты устарели (после make clean, например), то make test будет производить:

[100%] Building CXX object CMakeFiles/testExe.dir/src/test/testMain.cpp.o 
Linking CXX executable testExe 
[100%] Built target testExe 
/myProjectDir/src/test/testMain.cpp:5: error: Failure in FailSpect: false 
FAILURE: 1 out of 1 tests failed (1 failures). 
Test time: 0.00 seconds. 
[100%] Built target test 
Смежные вопросы