本文档翻译自:https://docs.conan.io/en/latest/creating_packages/define_abi_compatibility.html#changing-the-default-package-id-mode

    可以在conan.conf文件中更改默认的semver_direct_mode包id模式:

    Conan.conf配置文件 ¶

    1. [general]
    2. default_package_id_mode=full_package_mode

    可能的值是上述方法的名称: full_recipe_modesemver_mode等。

    :::info Note
    default_package_id_mode是全局配置。 它将更改所有软件包的所有软件包ID的计算方式。 不可能混合使用不同的default_package_id_mode值。 必须在所有客户端,服务器,CI等中使用相同的default_package_id_mode,并且必须重新构建所有软件包才能更改该默认值。 ::: 请注意,默认的package-id模式是在初始化包和调用package_id() 方法之前使用的模式。在conan.conf中,您仍然可以将full_package_mode定义为默认值,但是如果配方声明它是仅标题的,则使用:

    1. def package_id(self):
    2. self.info.header_only() # clears requires, but also settings if existing
    3. # or if there are no settings/options, this would be equivalent
    4. self.info.requires.clear() # or self.info.requires.unrelated_mode()

    这仍然会被执行,改变 “默认” 行为,并导致一个包只为所有可能的配置和依赖项版本生成一个包id。
    请记住,conan.conf可以与conan config install共享并安装。
    考虑到您可以将兼容的包与包id模式结合使用。
    例如,如果您生成的二进制包使用默认的readpe_revision_mode,但您希望从激活了不同模式的客户端使用这些包,您可以创建一个兼容的包,将模式转换为readpe_revision_mode,以便在未找到默认模式的包的情况下,可以解析使用readpe_revision_mode生成的包:

    1. from conans import ConanFile
    2. class Pkg(ConanFile):
    3. ...
    4. def package_id(self):
    5. p = self.info.clone()
    6. p.requires.recipe_revision_mode()
    7. self.compatible_packages.append(p)