有时,检查食谱那一刻正在运行的柯南版本可能会很有用。 尽管我们认为柯南中心配方仅可向前兼容,但通过这种检查可以更新它们,以便它们可以与旧版本的柯南兼容。
    让我们看一个基本的例子:

    conanfile.py

    1. from conans import ConanFile, CMake, __version__ as conan_version
    2. from conans.model.version import Version
    3. class MyLibraryConan(ConanFile):
    4. name = "mylibrary"
    5. version = "1.0"
    6. def build(self):
    7. if conan_version < Version("0.29"):
    8. cmake = CMake(self.settings)
    9. else:
    10. cmake = CMake(self)
    11. ...

    在这里,它检查Conan版本,以维护CMake构建助手对低于Conan 0.29的版本的兼容性。 它还使用内部Version()类在if子句中执行semver比较。
    当客户端足够新时,也可以使用它来利用新功能,例如:

    1. from conans import ConanFile, tools, __version__ as conan_version
    2. from conans.model.version import Version
    3. class MyPackage(ConanFile):
    4. name = "package"
    5. ...
    6. def package_id(self):
    7. if conan_version >= Version("1.20"):
    8. if self.settings.compiler == "gcc" and self.settings.compiler.version == "4.9":
    9. compatible_pkg = self.info.clone()
    10. compatible_pkg.settings.compiler.version = "4.8"
    11. self.compatible_packages.append(compatible_pkg)

    在所有使用者更新其客户端版本时,在食谱中引入新功能会很有用。 加上我们对Conan 1.x的稳定性承诺,在开发食谱的同时轻松采用新的Conan版本。