CMake 和 CTest:自动 运行 测试依赖项

CMake and CTest: automatically run test's dependencies

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

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

我想要一些方法来自动 运行 testX 及其所有依赖项。 类似于:

ctest <options> testX

因此,CTest 将 运行 textYtestZtestX。 有什么办法吗?

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

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

我能想到的实现您的目标的最佳方法是使用 LABELS property on the tests. You can retrieve the list of dependencies using 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

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。 CMake 3.9 中的 ctest 中还添加了新选项 -FS-FC-FA,允许在 [=13] 处控制自动添加夹具 setup/cleanup 测试=] 命令行。例如,要暂时跳过将 testY 添加到测试集但仍自动添加 testZ,可以这样做:

ctest -R testX -FS testY

夹具属性在 CMake docs 中进行了描述,以下文章更全面地介绍了夹具功能:

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