I want my tests to be launched each time my project is successfully built. And if some tests are broken I want my build to be broken too. By default I need to run tests manually by running ctest
command. CTest can actually build project but I use IDE that invokes make
to build sources. And make
doesn't run tests.
I add this command to my root CMakeLists.txt file but it doesn't work.
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
CMake doesn't return any errors and everything builds fine but my custom command doesn't invokes. How can I run something after each successful build in CMake?
Update:
My final solution is creating this macro:
macro(add_unit_test target target_test)
set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target_test} PARENT_SCOPE)
add_test(target ${CMAKE_CURRENT_BINARY_DIR}/${target_test})
endmacro(add_unit_test)
It calls add_test
and remembers test target in a list. Every test in a project added by this macro. In the root CMakeLists.txt I have this code:
add_custom_target( all_tests ALL
DEPENDS ${UNIT_TEST_TARGETS}
)
add_custom_command(TARGET all_tests
COMMENT "Run tests"
POST_BUILD COMMAND ctest ARGS --output-on-failure
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
It creates custom target that depends on all unit tests in a project. Custom command is runs after all_tests
target was built.
add_test
, I think you need${target_test}
instead oftarget_test
– Photographerctest
on all tests. – Paine