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

