我希望每次成功构建项目时都会启动测试.如果某些测试被破坏,我希望我的构建也被打破.默认情况下,我需要通过运行ctest命令手动运行测试.CTest实际上可以构建项目,但我使用调用make来构建源代码的IDE .而且make不会运行测试.
我将此命令添加到我的根CMakeLists.txt文件,但它不起作用.
add_custom_command(OUTPUT tests.txt
POST_BUILD
COMMAND ctest --output-on-failure)
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
它调用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}
)
Run Code Online (Sandbox Code Playgroud)
它创建依赖于项目中所有单元测试的自定义目标.自定义命令all_tests在构建目标后运行.
Fra*_*ser 20
add_custom_command只有当另一个CMake目标依赖于"tests.txt"时,才会执行此形式.我假设没有其他目标将"tests.txt"作为输入文件,因此自定义命令永远不会运行.
我想你可以用第二种形式add_custom_command来实现你的目标; 就像是:
add_custom_command(TARGET MainTest
POST_BUILD
COMMAND ctest -C $<CONFIGURATION> --output-on-failure)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10676 次 |
| 最近记录: |