关于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
相关产品推荐
相关产品推荐

