我有一个CMake项目分为三个部分:
我的问题是2 nd 部分。我的单元测试可执行文件是短二进制程序,成功时main
返回0,失败时返回1。我想将他们的运行集成为构建的一部分。
是否可以使用CMake执行以下两种解决方案之一:
我不是在寻找一个完整的CMake脚本代码,只需简单说明链接到相应文档的内容就足够了。
答案 0 :(得分:4)
查看类似问题和我的回答here。
我的建议主要是向运行POST_BUILD
的单元测试目标添加ctest
步骤。如果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}
)
参考文献:
答案 1 :(得分:0)
如果您希望保留测试二进制文件,即使测试失败,也可以尝试执行以下操作:
set(UNIT_TEST MyLibUnitTestTargetName)
add_test(NAME ${UNIT_TEST} COMMAND ${UNIT_TEST})
add_custom_target(run_unit_test ALL
COMMAND ${CMAKE_CTEST_COMMAND} --output-on-failure
DEPENDS ${UNIT_TEST})
这将创建一个始终运行单元测试的目标。但是,由于该命令是单独的目标,因此失败将导致构建失败,但不会删除原始UNIT_TEST
目标产生的二进制文件。