如何在 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.
时才会使用包
我们的项目在单元测试(即模拟)期间需要与正常编译期间不同的 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.
时才会使用包