我希望每次成功构建项目时都启动测试。如果某些测试被破坏,我希望我的构建也被破坏。默认情况下,我需要通过运行来手动运行测试ctest
命令。 CTest 实际上可以构建项目,但我使用调用的 IDEmake
建立资源。和make
不运行测试。
我将此命令添加到我的根 CMakeLists.txt 文件中,但它不起作用。
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
CMake 不会返回任何错误,一切都构建良好,但我的自定义命令不会调用。在 CMake 中每次成功构建后如何运行某些内容?
Update:
我的最终解决方案是创建这个宏:
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)
它调用add_test
并记住列表中的测试目标。此宏添加的项目中的每个测试。在根 CMakeLists.txt 中,我有以下代码:
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}
)
它创建依赖于项目中所有单元测试的自定义目标。自定义命令在之后运行all_tests
目标已建立。
这种形式的add_custom_command http://www.cmake.org/cmake/help/v2.8.10/cmake.html#command%3aadd_custom_command仅当另一个 CMake 目标依赖于“tests.txt”时才会执行。我假设没有其他目标将“tests.txt”作为输入文件,因此自定义命令永远不会运行。
我认为你可以使用第二种形式add_custom_command
实现你的目标;就像是:
add_custom_command(TARGET MainTest
POST_BUILD
COMMAND ctest -C $<CONFIGURATION> --output-on-failure)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)