4

在我的 CMakeLists.txt 我有这样的东西:

 set_property(TEST testX APPEND PROPERTY DEPENDS testY)
 set_property(TEST testX APPEND PROPERTY DEPENDS testZ)

我想要某种方式来testX自动运行它的所有依赖项。就像是:

ctest <options> testX

结果,CTest 将运行textY,testZtestX. 有没有办法做到这一点?

或者,如果现在不可能,有没有办法通过脚本从 CMake 构建目录中提取有关依赖项的信息?

4

2 回答 2

3

据我所知,没有内置的方法可以做到这一点。

我能想到的实现目标的最佳方法是在测试中使用该LABELS属性get_property您可以使用or检索依赖项列表,get_test_property并将相同的标签应用于testX每个依赖项测试:

get_test_property(testX DEPENDS DependenciesOfTestX)
set_tests_properties(testX ${DependenciesOfTestX} PROPERTIES LABELS LabelX)

然后你可以告诉 CTest 只运行带有该标签的测试:

ctest -L LabelX
于 2015-06-14T15:19:53.523 回答
3

CMake 3.7 中添加了对测试装置的支持,它们完全符合您的要求。您的特定场景将像这样实现:

set_property(TEST testX PROPERTY FIXTURES_REQUIRED Foo)
set_property(TEST testY PROPERTY FIXTURES_SETUP Foo)
set_property(TEST testZ PROPERTY FIXTURES_SETUP Foo)

然后,您可以要求ctest运行testX,它会自动添加testYtestZ到要执行的测试集:

ctest -R testX

它还将确保testX仅在之后运行testYtestZ已通过。如果其中一个testYtestZ失败,testX将被跳过。新选项-FS-FC并且-FA还添加到ctestCMake 3.9 中,允许在ctest命令行中控制自动添加夹具设置/清理测试。例如,要暂时跳过添加testY到测试集但仍自动添加testZ,可以这样做:

ctest -R testX -FS testY

固定装置属性在 CMake文档中进行了描述,以下文章更全面地介绍了固定装置功能:

https://crascit.com/2016/10/18/test-fixtures-with-cmake-ctest/

于 2017-11-01T20:27:50.610 回答