cmake - 列出 CTest 测试套件中可执行文件的位置
问题描述
我有一些使用 CMake 编译的源代码,其中包含通过 CMake 指令添加到 CTest 的单元测试add_test()
。我想要在这个测试套件中使用的可执行文件列表(绝对/相对路径)。
由于测试添加如下:
add_test(NAME ${A} COMMAND ${execA})
add_test(NAME ${B} COMMAND ${execB})
add_test(NAME ${C} COMMAND ${execA} ${addOptions})
三个测试(、和)只有两个不同的可执行文件(${execA}
、)。${execB}
${A}
${B}
${C}
我完全可以重复并忽略选项或有选项。
因此,理想的输出如下(但如果需要,我当然可以手动进行一些解析):
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
CMake目标(单元测试)testThisFunction
和testThatFunction
${A} = "testA"
${B} = "testB"
${C} = "testC"
${addOptions} = "-WithThisFlag"
分别存储测试和选项的名称。
虽然我可以访问CMakeLists.txt,但我强烈希望ctest
在 CMake 配置和后续编译已经完成后仅在级别上执行此操作(因此,不使用CMakeLists.txt中的 CMake 命令生成可执行文件列表)。
如果这是相关的,我正在使用 CTest 3.10.2,但可以升级。
解决方案
首先,您只需要命令中的-N
or--show-only
选项ctest
,而不是两者都需要。在您的情况下,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" :
.
推荐阅读
- python - 如何在 glob() 模式中写“或”?
- redux-toolkit - ReduxToolKit:在查询挂钩中使用 SelectFromResult 选项的正确方法?
- dependencies - YOCTO QA 问题:my-package 包中包含的 xxx 需要 libzlog.so.1.2()(64bit),但在 RDEPENDS 中找不到提供程序
- python - 你能在 LibreOffice 中用 Python 录制宏吗?
- php - 加载表但另一个响应未定义
- regex - 15 位数字和最多 2 位小数的正则表达式
- windows - 以较低的权限级别运行 bat 文件
- flutter - 下拉菜单在 csc 选择器颤动中处于禁用状态
- sql - SQL 查询 - 添加汇总行
- sql - JasperReports 带参数调试 SQL