如何在 conanfile 中实现条件要求?

How to implement conditional requirements in a conanfile?

我们的项目在单元测试(即模拟)期间需要与正常编译期间不同的 Conan 包。 对于这样的用例,是否有如何在 conanfile 中实现条件要求的最佳实践?

我们试过像这样使用带有环境变量的开关:

class project_a(ConanFile):
....
    def requirements()
        if os.getenv('UNIT_TESTING') == 'true':
            self.requires('mock_for_testing/1.0.0@someuser/somechannel
...

但是 project_a 的要求总是在单元测试期间更改。 因此,在测试项目时,也会消耗 project_a.

Conan 在构建包时并不专注于 运行 单元测试,它专注于打包工件,如库、headers 和二进制文件。

但是,有一个准备好的环境变量可用于单元测试:CONAN_RUN_TESTS. You should use tools.get_env

此外,请查看 self.develop,它可用于在您构建或使用包时进行检测,因此您可以将其用作添加或不添加需求的条件:

def requirements()
    if self.develop:
        self.requires('mock/1.0.0@user/channel')

那么,只有在运行命令create.

时才会使用包