有时,检查食谱那一刻正在运行的柯南版本可能会很有用。 尽管我们认为柯南中心配方仅可向前兼容,但通过这种检查可以更新它们,以便它们可以与旧版本的柯南兼容。
让我们看一个基本的例子:
conanfile.py
from conans import ConanFile, CMake, __version__ as conan_version
from conans.model.version import Version
class MyLibraryConan(ConanFile):
name = "mylibrary"
version = "1.0"
def build(self):
if conan_version < Version("0.29"):
cmake = CMake(self.settings)
else:
cmake = CMake(self)
...
在这里,它检查Conan版本,以维护CMake构建助手对低于Conan 0.29的版本的兼容性。 它还使用内部Version()类在if子句中执行semver比较。
当客户端足够新时,也可以使用它来利用新功能,例如:
from conans import ConanFile, tools, __version__ as conan_version
from conans.model.version import Version
class MyPackage(ConanFile):
name = "package"
...
def package_id(self):
if conan_version >= Version("1.20"):
if self.settings.compiler == "gcc" and self.settings.compiler.version == "4.9":
compatible_pkg = self.info.clone()
compatible_pkg.settings.compiler.version = "4.8"
self.compatible_packages.append(compatible_pkg)
在所有使用者更新其客户端版本时,在食谱中引入新功能会很有用。 加上我们对Conan 1.x的稳定性承诺,在开发食谱的同时轻松采用新的Conan版本。