主机依赖项
构建时其他端口用于生成代码或实施自定义版本系统的工具可在 vcpkg 中进行打包。
使用
使用端口作为工具时,必须将依赖项字段 "host"
设置为 true。 例如:
{
"name": "contoso-http-library",
"version-string": "1.0.0",
"description": "Contoso's http runtime library",
"dependencies": [
"contoso-core-library",
{
"name": "contoso-code-generator",
"host": true
},
{
"name": "contoso-build-system",
"host": true
}
]
}
这种情况下,将会在构建 contoso-http-library
之前,为主机三联密码构建和安装 contoso-code-generator
和 contoso-build-system
(包括任何转换依赖项)。
注意
使用者必须使用 vcpkg.json
而不是 CONTROL
作为其元数据格式。 可以使用 vcpkg format-manifest /path/to/CONTROL
轻松转换现有 CONTROL
文件。
然后,在使用者的端口文件中(在示例中为 contoso-http-library
),会将 CMake 变量 CURRENT_HOST_INSTALLED_DIR
定义为 installed/<host-triplet>
并应使用该变量来定位任何所需的资产。 在示例中,contoso-code-generator
可能已经安装了 tools/contoso-code-generator/ccg.exe
,使用者可通过以下方式添加到其本地路径:
# ports/contoso-http-library/portfile.cmake
vcpkg_add_to_path(${CURRENT_HOST_INSTALLED_DIR}/tools/contoso-code-generator)
指定主机三联密码
默认主机三联密码根据主机体系结构和操作系统进行选择,例如 x64-windows
、x64-linux
或 x64-osx
。 可通过以下方式进行覆盖:
- 在基于 CMake 的清单模式下,在第一个
project()
指令之前,调用set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "")
- 在基于 MSBuild 的清单模式下,设置
VcpkgHostTriplet
属性 - 在命令行上,通过标志
--host-triplet=...
VCPKG_DEFAULT_HOST_TRIPLET
环境变量
生产
生产工具没有特殊要求;工具应编写为标准端口,遵循所有常规策略和做法。 值得注意的是,工具应基于 TARGET_TRIPLET
而不是其端口文件的上下文中的 HOST_TRIPLET
进行构建。
如果当前上下文是交叉编译(TARGET_TRIPLET
不是 HOST_TRIPLET
),则会将 VCPKG_CROSSCOMPILING
设置为一个真的值。
if(VCPKG_CROSSCOMPILING)
# This is a native build
else()
# This is a cross build
endif()
仅限主机的端口
某些端口仅应通过主机依赖项进行依赖;常见示例为脚本端口和工具端口。 这种情况下,可以使用 "native"
支持表达式来描述这一点。 当 VCPKG_CROSSCOMPILING
为 false 时(暗示 TARGET_TRIPLET == HOST_TRIPLET
),则对表达式的支持为 true。
VCPKG_USE_HOST_TOOLS
将此 CMake 选项设置为将 vcpkg 生成的可执行文件添加到 CMAKE_PROGRAM_PATH
。
并使它们在生成过程中可用。
若要使此选项生效,必须在调用 CMakeLists.txt
文件中的 project()
之前设置它。 还必须设置 VCPKG_HOST_TRIPLET
变量。
只有安装在主机三元组的tools
文件夹中的工具才会添加到 CMAKE_PROGRAM_PATH
中。
实际上,添加了以下位置:
${VCPKG_INSTALLED/DIR}/${VCPKG_HOST_TRIPLET}/tools
${VCPKG_INSTALLED/DIR}/${VCPKG_HOST_TRIPLET}/tools/*/bin