在我的CMakeLists.txt中我有这样的事情:
set_property(TEST testX APPEND PROPERTY DEPENDS testY)
set_property(TEST testX APPEND PROPERTY DEPENDS testZ)
我想要一些方法来自动运行testX
及其所有依赖项。
类似的东西:
ctest <options> testX
因此,CTest将运行textY
,testZ
和testX
。
有没有办法做到这一点?
或者,如果现在不可能,有没有办法通过脚本从CMake构建目录中提取依赖关系的信息?
答案 0 :(得分:3)
据我所知,没有内置的方法可以做到这一点。
我能想到实现目标的最佳方法是在测试中使用LABELS
property。您可以使用get_property
或get_test_property
检索依赖项列表,并将相同的标签应用于testX
及其每个相关测试:
get_test_property(testX DEPENDS DependenciesOfTestX)
set_tests_properties(testX ${DependenciesOfTestX} PROPERTIES LABELS LabelX)
然后你可以告诉CTest只运行带有该标签的测试:
ctest -L LabelX
答案 1 :(得分:2)
在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
,它会自动将testY
和testZ
添加到要执行的测试集中:
ctest -R testX
它还将确保testX
仅在testY
和testZ
通过后才会运行。如果testY
或testZ
中的任何一个失败,则会跳过testX
。新的选项-FS
,-FC
和-FA
也被添加到CMake 3.9中的ctest
,允许在ctest
处自动添加夹具设置/清理测试命令行。例如,要暂时跳过将testY
添加到测试集但仍然自动添加testZ
,可以执行以下操作:
ctest -R testX -FS testY
在CMake docs中描述了灯具属性,以下文章更全面地介绍了灯具功能:
https://crascit.com/2016/10/18/test-fixtures-with-cmake-ctest/