我有一个 CMake 项目,分为三个部分:
- 我的库的编译
- 编译许多单元测试程序来测试这些库的每个精确子部分
- 使用这些库编译程序示例
My question is about the 2nd part. My unit tests executables are short binary programs with a main
returning 0 on success, 1 on fail. I would like to integrate their running as part of the build.
是否可以使用 CMake 来执行这两个解决方案之一:
- 运行每个单元测试程序并检查返回值,如果失败则生成错误。
- 生成一个测试脚本,该脚本将运行并检查每个单元测试程序,并检查返回值以在任何失败时产生错误。
我并不是在寻找完整的 CMake 脚本代码,通过相应文档的链接简单说明可能发生的情况就足够了。
看到类似的问题和我的回答here https://stackoverflow.com/questions/29456950/global-custom-target-in-cmake.
主要我的建议是添加一个POST_BUILD
步骤到运行的单元测试目标ctest
. If a POST_BUILD
步骤确实失败(返回码不为0),构建将失败。
就像是:
set(UNIT_TEST MyLibUnitTestTargetName)
add_test(NAME ${UNIT_TEST} COMMAND ${UNIT_TEST})
add_custom_command(
TARGET ${UNIT_TEST}
COMMENT "Run tests"
POST_BUILD
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
COMMAND ${CMAKE_CTEST_COMMAND} -C $<CONFIGURATION> -R "^${UNIT_TEST}$" --output-on-failures
)
这样做的优点是它的运行方式就像您调用的那样ctest
.
简短版本 - 不带add_test()
/ ctest
- 将会:
set(UNIT_TEST MyLibUnitTestTargetName)
add_custom_command(
TARGET ${UNIT_TEST}
COMMENT "Run tests"
POST_BUILD
COMMAND ${UNIT_TEST}
)
参考:
- add_test() https://cmake.org/cmake/help/v3.3/command/add_test.html
- add_custom_command() https://cmake.org/cmake/help/v3.3/command/add_custom_command.html
- 使用 cmake 构建项目后如何运行 ctest https://stackoverflow.com/questions/15115075/how-to-run-ctest-after-building-my-project-with-cmake
- CMake:作为构建的一部分运行单元测试 https://cmake.org/pipermail/cmake/2011-September/046218.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)