Я переопределяю конфигурацию cmake моего проекта на основе того, что я узнал из выступлений Дэниела Пфайфера «Эффективный CMake», но я все еще не могу разобраться ctest.
В настоящее время у меня есть следующая настройка для моеготесты:
enable_testing()
find_program(MEMCHECK_COMMAND valgrind)
# executable
add_executable(myTest ${SRC_LIST})
target_link_libraries(myTest ${LIB_LIST})
# test
add_test(NAME myTest_test
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/myTest)
add_custom_target(myTest_test
COMMAND ctest -R myTest_test --output-on-failure
DEPENDS myTest)
# memcheck
add_test(NAME myTest_memcheck
COMMAND ${MEMCHECK_COMMAND} ${CMAKE_CURRENT_BINARY_DIR}/myTest)
add_custom_target(myTest_memcheck
COMMAND ctest -R myTest_memcheck --output-on-failure
DEPENDS ${TEST_NAME})
и я могу запустить make myTest_test
и make myTest_memcheck
и знать, что ничего не сломал.
Мне больно, что я должен делать это для каждого тестаИсполняемый (и проект большой, поэтому у меня их десятки) и даже извлеченный как функция, он просто кажется неправильным.
Я прочитал ctest docs (https://gitlab.kitware.com/cmake/community/wikis/doc/ctest/Testing-With-CTest), и приборные панели мне кажутся почти идеальными -если бы я мог просто запустить ctest -R myTest -T test
, ctest -R myTest -T memcheck
и ctest -R myTest -T coverage
, я был бы очень счастлив :) (и даже более счастлив, если эти команды будут запускать сборку при необходимости).
Проблема в том, что include(CTest)
создает цели, которые мне не нужны (непрерывные / ночные инструментальные панели с шагами Start / Update / Configure / Submit). Он будет использоваться исключительно как экспериментальные сборки и выполняться разработчиками во время кодирования. Для CI у меня есть Jenkins с этимсобственная магияЯ хотел бы в итоге: - Панель инструментов / Сборка - Панель инструментов / Тестирование - Панель инструментов / MemCheck - Панель инструментов / Покрытие
Что мне делать?Должен ли я вручную создать свою собственную панель инструментов (если это возможно) или отказаться от этой идеи и остаться с моими собственными целями?