概念:默认功能
本文介绍默认功能的概念、其含义和有效管理策略。
默认功能是在安装端口时自动包含的一组功能(除非显式禁用)。 这些功能可确保库保持功能基线级别,即使其依赖项关系图的复杂性增加也是如此。
注意
并非所有端口都包含默认功能。
默认功能的角色
默认功能可确保具有模块化功能的库中提供基本功能,从而提供用户友好的体验。
例如,能够提取各种存档格式的库可能具有每种格式作为可选功能。 如果没有默认功能,该库可能不会直接包含任何提取算法,从而使初始使用复杂化。
除非另有明确请求,否则 vcpkg 安装的包将始终包含其默认功能。 此行为适用于用户通过清单文件或 vcpkg 安装调用所需的包,以及作为依赖项所需的包。
在清单模式下禁用默认功能
将 "default-features": false
属性添加到依赖项声明,以禁用其默认功能的安装。
只有用户请求的依赖项才能禁用默认功能的自动安装。
如果要禁用可传递依赖项的默认功能,需要将其提升为项目清单中的直接依赖项。
在经典模式下禁用默认功能
将特殊 core
功能添加为要安装的包请求的功能的一部分。
注意
如果想要禁用可传递依赖项的默认功能,类似于清单模式的工作原理;需要在命令行中将其提升为直接安装请求。
示例 1:包括具有默认功能的库
{
"name": "my-application",
"version": "0.15.2",
"dependencies": [
"extract-any"
]
}
在此方案中,extract-any
安装了其默认功能,从而确保即时功能。
示例 2:禁用默认功能(清单模式)
{
"name": "my-application",
"version": "0.15.2",
"dependencies": [
{
"name": "extract-any",
"default-features": false
}
]
}
此处已安装 extract-any
,但未安装其默认功能,从而允许进行定制设置。
示例 3:禁用默认功能(经典模式)
vcpkg install extract-any[core]
此处使用特殊 core
功能安装了 extract-any
,但未安装其默认功能。
默认功能交互
安装具有默认功能的端口(默认行为):由于缺少特定功能请求,
vcpkg install extract-any
安装了extract-any
及其默认功能 (extract-any[format-a]
)。指定功能而不禁用默认值:
vcpkg install extract-any[format-b]
导致安装extract-any
以及指定的功能 (format-b
) 和默认 (format-a
) 功能 (extract-any[format-a,format-b]
)。显式禁用默认功能:
vcpkg install extract-any[core]
安装了extract-any
,但未安装任何默认功能,因为[core]
会显式将其排除。可传递依赖项和默认功能:如果
portB
依赖于extract-any[format-a]
,vcpkg install extract-any[format-b] portB
可能会导致安装extract-any[format-a,format-b] portB
,但不会显式禁用extract-any
的默认功能。将端口与各种功能规范相结合:
vcpkg install extract-any[format-b] portB
安装extract-any[format-a, format-b] portB
,包括extract-any
的默认功能(除非显式排除)。全面禁用默认功能:
vcpkg install extract-any[core] portB
确保extract-any
仅随显式请求的功能一起安装,不包括默认值。
管理默认功能
若要有效地管理项目中的默认功能,请执行以下操作:
- 显式:仅指定所需的功能。 使用
[core]
在必要时禁用默认功能。 - 检查依赖项:使用
vcpkg depend-info <port>
了解依赖项解析并相应地调整配置。 - 利用覆盖和基线:利用版本控制和基线功能更好地控制依赖项解析。
有关详细信息,请参阅以下部分:
采用明确的默认功能管理策略将有助于简化项目的依赖项管理,确保仅包含应用程序功能所需的内容。