【问题标题】:CMake/CTest - Where was defined test XYZ?CMake/CTest - 在哪里定义了测试 XYZ?
【发布时间】:2020-07-06 20:04:51
【问题描述】:

在构建了包含许多测试的 CMake/CTest 设置后,我发现问题越来越严重。 如果ctest -R test_some_side_corner_item_XYZ失败了,我如何系统地回溯到有人添加测试test_some_side_corner_item_XYZ的地方?

我了解我们可以在 add_test() 之上添加宏的问题,这使得做出任何明确的答案变得有点困难 - 但仍然如此。

似乎cmake 没有任何明显的方法来实现这一点 - ctest 似乎也是如此。

【问题讨论】:

  • track back 你的意思是像时光倒流?所以你不能grep -r test_some_side_corner_item_XYZ你的项目吗? that we can add macros on top of add_test() - 所以在 add_test 之上添加一个宏来记录它的所有使用。然后你会看到。

标签: cmake ctest


【解决方案1】:

您可以使用ctest 命令行options 在您的CMakeLists.txt 层次结构中找到进行add_test() 调用的确切 行。我们可以使用--show-only=json-v1 选项来显示有关测试的 JSON 格式的元数据:

ctest -R test_some_side_corner_item_XYZ --show-only=json-v1

这个打印的一个例子是:

{
  "backtraceGraph" :
  {
    "commands" :
    [
      "add_test"
    ],
    "files" :
    [
      "C:/workspace/myproject/CMakeLists.txt"
    ],
    "nodes" :
    [
      {
        "file" : 0
      },
      {
        "command" : 0,
        "file" : 0,
        "line" : 34,
        "parent" : 0
      }
    ]
  },
...

这列出了为此测试调用 add_test() 的 CMakeLists.txt 文件,以及调用它的行号 ("line" : 34)。


根据 CMake 文档,--show-only 选项实际上不会运行测试,而只会显示其信息:

-N,--show-only[=<format>]

禁用测试的实际执行。

此选项告诉 CTest 列出将要运行但实际上并未运行的测试。与-R 和-E 选项结合使用很有用。

注意,-R 选项是匹配您想要的测试的正则表达式,因此要获得精确匹配,您可以使用^ 和@987654336 锚定测试名称@:

ctest -R ^test_some_side_corner_item_XYZ$ --show-only=json-v1

【讨论】:

  • WAUV! @squareskittles
猜你喜欢
  • 2010-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-27
  • 2021-09-25
  • 2016-04-26
相关资源
最近更新 更多