我希望每次构建项目时都能启动测试。如果一些测试被破坏,我希望我的构建也被打破。默认情况下,我需要通过运行ctest
命令手动运行测试。 CTest实际上可以构建项目,但我使用调用make
来构建源代码的IDE。而make
不会运行测试。如何在用cmake构建项目后运行ctest
我将此命令添加到我的根CMakeLists.txt文件,但它不起作用。
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
CMake不会返回任何错误,并且一切都很好,但我的自定义命令不会调用。在CMake中每次成功构建后,我如何运行一些东西?
更新:
我的最终解决方案是这样的功能:
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_test',我认为你需要的''而不是target_test' – experquisite 2016-03-08 16:25:11