本文档翻译自:https://docs.conan.io/en/latest/creating_packages/getting_started.html#settings-vs-options

    我们使用了 osarchcompilersettings。注意上面的包配方还包含一个 sharedoptions (定义为 options = {“shared”: [True,False]})。那么 settings options 之 间有什么区别?

    settings 是 项目范围 的配置,通常会影响正在构建的整个项目。例如,对于依赖关系图中的所有包,操作系统或编译环境自然是要相同的。想为Windows应用程序链接Linux库是不可能的。

    settings 在包配方中不能给定默认值。给定库的配方不能说其默认值为 os=Windows。os 将从环境得到,这是强制性的。

    settings 是可配置的。您可以在settings.yml文件中编辑、添加、删除设置或子设置。请参阅settings.yml

    另一方面,options 是特定于包的配置。静态或共享库不是适用于所有包的设置。有些包是仅只有头文件,而其他包可能只有数据或可执行文件。包可以包含不同文件的混合。shared 是一个常见的选项,但是包可以定义和使用他们想要的任何选项。

    options 在包配方中定义,包括其支持的值,而其他选项可以由包配方本身默认。库的包可以很好地定义默认情况下它将是静态库 (典型的默认值)。如果未指定其他。包将是静态的。

    上述情况有一些例外。例如,可以使用命令行按包定义设置:

    1. $ conan install . -s MyPkg:compiler=gcc -s compiler=clang ..

    这将对 MyPkg 使用 gcc,对其余依赖项使用clang (非常罕见的情况)。

    在某些情况下,许多包使用相同的选项,从而允许您在使用模式后设置其值,例如:

    1. $ conan install . -o *:shared=True