我正在根据我从Daniel Pfeifer的“有效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文档(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)
创建了我不需要的目标(连续/夜间仪表板以及“开始/更新/配置/提交”步骤)。它将仅用作实验性构建,并由开发人员在编码期间执行。对于CI,我拥有詹金斯本身的魔力。我想结束于:
-仪表板/构建
-仪表板/测试
-仪表板/ MemCheck
-仪表板/盖板
我该怎么办?我应该手动创建自己的仪表板(如果可能的话)还是放弃这个想法并保留我的自定义目标?