列出 CTest 测试套件中可执行文件的位置

List location of executables within the CTest test suite

我有一些使用 CMake 编译的源代码,其中单元测试通过 CMake 指令添加到 CTest add_test()。我想要此测试套件中使用的可执行文件列表(absolute/relative 路径)。

由于测试添加如下:

add_test(NAME ${A} COMMAND ${execA})
add_test(NAME ${B} COMMAND ${execB})
add_test(NAME ${C} COMMAND ${execA} ${addOptions})

三个测试(${A}${B}${C})只有两个不同的可执行文件(${execA}${execB})。

我完全可以接受重复和忽略选项或有选项。

因此,理想的输出如下(但如果需要,我当然可以手动进行一些解析):

 src/folder1/test/testThisFunction
 src/folder2/test/testThatFunction
 src/folder1/test/testThisFunction -WithThisFlag

我能得到的最接近的是:

ctest -N,--show-only

它没有 运行 测试,只是显示它们:

    Start 1: testA
1/3 Test #1: testA .......................   Passed    0.01 sec
    Start 2: testB
2/3 Test #2: testB .......................   Passed    0.01 sec
    Start 3: testC
3/3 Test #3: testC ........................  Passed    0.01 sec

遗憾的是,此输出不包含有关可执行文件路径的信息。

在上面的这个例子中,假设

${execA} = testThisFunction
${execB} = testThatFunction

其中 testThisFunctiontestThatFunction 是 CMake 目标(单元测试),

${A} = "testA"
${B} = "testB"
${C} = "testC"
${addOptions} = "-WithThisFlag"

分别存储测试和选项的名称。

虽然我可以访问 CMakeLists.txt,但我强烈希望在 CMake 配置和后续编译完成后仅在 ctest 级别执行此操作(因此,不使用 CMakeLists.txt 中的 CMake 命令生成可执行文件列表)。

如果这是相关的,我正在使用 CTest 3.10.2,但可以升级。

首先,您只需要 ctest 命令中的 -N--show-only 选项,而不是两者。在你的例子中,CTest 默默地忽略了你的命令行选项 -N,--show-only 因为它没有被识别。输出表明您的测试完成了 运行。要简单地列出它们,请使用:

ctest --show-only

回答您的问题:如果您升级到 CMake 3.14 或更高版本,您将获得 JSON 格式的 ctest --show-only 选项。

ctest --show-only=json-v1

这将打印有关每个测试的信息,包括传递给每个测试的参数。您的输出可能包含如下内容:

  "tests" :
  [
    {
      "backtrace" : 1,
      "command" :
      [
        "src/folder1/test/testThisFunction"
      ],
      "config" : "Debug",
      "name" : "testA",
      "properties" :
      [
        {
          "name" : "WORKING_DIRECTORY",
          "value" : "src"
        }
      ]
    },
    {
      "backtrace" : 3,
      "command" :
      [
        "src/folder2/test/testThatFunction"
      ],
      "config" : "Debug",
      "name" : "testB",
      "properties" :
      [
        {
          "name" : "WORKING_DIRECTORY",
          "value" : "src"
        }
      ]
    },
    {
      "backtrace" : 5,
      "command" :
      [
        "src/folder1/test/testThisFunction",
        "-WithThisFlag"
      ],
      "config" : "Debug",
      "name" : "testC",
      "properties" :
      [
        {
          "name" : "WORKING_DIRECTORY",
          "value" : "src"
        }
      ]
    }
  ],

在输出中,可执行文件的完整路径和测试的命令行参数列在 "command" : 之后。