You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Conan 1.20.5中CMake.test()不生成XML测试报告及build传参报错的问询

嘿,我来帮你搞定这个Conan和CTest生成XML测试报告的问题!

解决Conan cmake.test()缺失XML测试报告的问题

问题根源

你用的Conan 1.20.5版本里,cmake.test()方法默认并没有把-T test这个关键参数传递给CTest——这就是为啥直接敲ctest -T test能生成XML报告,但通过Conan调用就没动静的原因。另外你说给build()加参数会构建失败,确实是这个版本的Conan会把build()的参数直接转发到内部的_build()方法,导致参数冲突出错。

可行解决方案

1. 手动调用CTest命令替代cmake.test()

既然cmake.test()不支持我们需要的参数,不如直接在build()里手动调用CTest命令,这样就能指定生成XML报告的参数了:

def build(self):
    cmake = CMake(self)
    cmake.configure()
    cmake.build()
    # 手动执行CTest,指定生成XML测试报告,同时开启失败时输出详情
    self.run("ctest -T test --output-on-failure", run_environment=True)

这里run_environment=True一定要加上,它会让Conan把正确的环境变量加载进来,保证CTest能找到你的测试程序。

2. 确认CMakeLists.txt的测试配置

先检查下你的CMakeLists.txt里有没有启用测试支持,比如:

enable_testing()
# 举个例子,添加你的测试用例
add_test(NAME MySampleTest COMMAND MyTestExecutable)

要是没加enable_testing(),CTest根本不会生成任何测试报告哦。

3. 关于构建参数的正确传递方式

你之前尝试给build()加参数导致失败,在Conan 1.20.5里确实要避开这种操作。如果需要传递构建相关的参数,应该在cmake.build()里指定,比如要并行构建的话:

cmake.build(args=["--parallel"])

验证效果

运行Conan构建完成后,你去构建目录里的Testing文件夹看看,应该就能找到和之前直接用ctest -T test生成的一样的XML测试报告啦。

内容的提问来源于stack exchange,提问作者chris polzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 09:42:31