我的构建中有一些测试是可选的。我的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
来运行它们会很好,而不必配置一些脚本或其他方法。
通过设置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或更高版本。