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

Conan项目中tools.build:skip_test配置不生效问题求助

问题分析

核心问题是Conan配置值的类型处理错误:tools.build:skip_test通过命令行传入的是字符串"False",而非布尔值False。Python中not "False"的结果是False(非空字符串视为True),导致你的条件判断逻辑反转,进入跳过测试的分支。

另外日志中BUILD_TESTING STREQUAL OFF说明CMake未启用测试目标,即使后续执行ctest也会无测试可跑。

解决方案

1. 修正配置值的布尔转换逻辑

修改build函数中对tools.build:skip_test的处理,将字符串转为布尔值:

from distutils.util import strtobool

def build(self):
    print("TRACE: build")
    # 获取配置并转为布尔值
    skip_test_str = self.conf.get("tools.build:skip_test", default="True")
    skip_test = strtobool(skip_test_str) == 1
    
    cmake = CMake(self)
    # 根据skip_test设置BUILD_TESTING变量,确保CMake生成测试目标
    cmake.configure(variables={"BUILD_TESTING": "OFF" if skip_test else "ON"})
    
    if not skip_test:
        print("DO_TEST !!")
        cmake.build()
        cmake.ctest(cli_args=["--progress", "--output-on-failure"])
    else:
        print("SKIP_TEST !?!")

2. 简化命令行参数

你使用的-tf=""是用来跳过test_package目录的测试,而你的测试逻辑在build函数内,这个参数可以去掉。执行命令改为:

conan create . -c tools.build:skip_test=False

3. 验证配置传递(可选)

如果仍有问题,可在build函数中打印配置值确认:

print(f"tools.build:skip_test value: {self.conf.get('tools.build:skip_test')}")

确认输出为False而非其他值。

额外说明
  • Conan 2.x中所有配置参数均以字符串形式存储,直接使用布尔判断会导致逻辑错误,必须显式转换类型。
  • BUILD_TESTING是CMake的标准变量,控制是否生成测试目标,需与你的测试执行逻辑同步开关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 15:42:45