主机依赖项

构建时其他端口用于生成代码或实施自定义版本系统的工具可在 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-generatorcontoso-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-windowsx64-linuxx64-osx。 可通过以下方式进行覆盖:

  1. 在基于 CMake 的清单模式下,在第一个 project() 指令之前,调用 set(VCPKG_HOST_TRIPLET "<triplet>" CACHE STRING "")
  2. 在基于 MSBuild 的清单模式下,设置 VcpkgHostTriplet 属性
  3. 在命令行上,通过标志 --host-triplet=...
  4. 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