Como executar o ctest após construir meu projeto com o cmake
Eu quero que meus testes sejam lançados toda vez que meu projeto for construído com sucesso. E se alguns testes forem quebrados, também quero que meu build seja quebrado. Por padrão, preciso executar testes manualmente executandoctest
comando. CTest pode realmente construir projeto, mas eu uso IDE que invocamake
para construir fontes. Emake
não executa testes.
Eu adiciono este comando ao meu arquivo CMakeLists.txt raiz, mas não funciona.
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
O CMake não retorna nenhum erro e tudo fica bem, mas meu comando personalizado não é invocado. Como posso executar algo após cada compilação bem-sucedida no CMake?
Atualizar:
Minha solução final é essa função:
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)
chamaadd_test
e lembra o alvo de teste em uma lista. Cada teste em um projeto adicionado por esta função. Na raiz CMakeLists.txt eu tenho este código:
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}
)
Ele cria um destino personalizado que depende de todos os testes de unidade em um projeto. Comando customizado é executado apósall_tests
alvo foi construído.