我的构建中有一些可选的测试。我的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
来运行它们(如果已构建),而不必配置某些脚本或其他方法。
答案 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或更高版本。