ctest仅运行现有测试

时间:2018-08-03 20:08:56

标签: cmake ctest

我的构建中有一些可选的测试。我的CMakeLists.txt看起来像:

add_custom_target(all-tests)

add_executable(A ...)
add_dependencies(all-tests A)
add_test(NAME A COMMAND ...)

add_executable(B ...)
add_dependencies(all-tests B)
add_test(NAME B COMMAND ...)

## optional
add_executable(C EXCLUDE_FROM_ALL ...)
add_test(NAME C COMMAND ...)

我可以跑步

$ make all-tests
$ ctest

要同时编译我的所有单元测试,然后运行它们。问题是,由于C是可选的,因此无法生成(全部都需要)。而且由于它没有构建,所以它不存在,并且被报告为失败了:

The following tests FAILED:
      6 - C (Not Run)
Errors while running CTest

是否有一种方法可以忽略此故障/让CTest不尝试运行不存在的测试/否则表达可选测试的想法?我有一类具有类似名称的可选测试,因此最好使用ctest -R来运行它们(如果已构建),而不必配置某些脚本或其他方法。

1 个答案:

答案 0 :(得分:0)

通过设置REQUIRED_FILES属性,使可选测试取决于内置测试可执行文件的存在:

add_test(NAME C COMMAND ...)
add_executable(C EXCLUDE_FROM_ALL ...)
set_property(TEST C PROPERTY REQUIRED_FILES "$<TARGET_FILE:C>")

使用生成器表达式TARGET_FILE需要CMake 3.0或更高版本。