Compartir a través de


¿Qué es el modo de manifiesto?

vcpkg tiene dos modos de operación: modo clásico y modo de manifiesto. Para la mayoría de los usuarios, se recomienda el modo de manifiesto.

El modo manifiesto usa archivos JSON declarativos para describir los metadatos sobre el proyecto o paquete. En cualquier caso, el nombre de este archivo es vcpkg.json.

El modo de manifiesto se activa ejecutando el vcpkg install comando mientras hay un archivo de manifiesto (vcpkg.json) en el directorio de trabajo. Lea adelante para obtener más información sobre cómo instalar paquetes en modo de manifiesto.

El modo de manifiesto también es necesario para usar características avanzadas, como el control de versiones y los registros personalizados.

Archivos de manifiesto en puertos

Todos los puertos vcpkg deben incluir un vcpkg.json archivo que describa los metadatos sobre el paquete que instalan.

vcpkg usa los metadatos del manifiesto del paquete para diversos fines, como, por ejemplo, calcular árboles de dependencia, buscar paquetes por nombre o descripción, resolver características, etc.

Ejemplo de manifiesto de paquete

{
  "name": "fmt",
  "version": "10.1.1",
  "description": "Formatting library for C++. It can be used as a safe alternative to printf or as a fast alternative to IOStreams.",
  "homepage": "https://github.com/fmtlib/fmt",
  "license": "MIT",
  "dependencies": [
    {
      "name": "vcpkg-cmake",
      "host": true
    },
    {
      "name": "vcpkg-cmake-config",
      "host": true
    }
  ]
}

Archivos de manifiesto en proyectos

El propósito principal de usar un archivo de manifiesto en el proyecto es declarar las dependencias. Al usar un manifiesto de proyecto, puede especificar restricciones de versión e invalidaciones para bloquear versiones específicas de las dependencias. Esta característica no está disponible en modo clásico.

Ejemplo de manifiesto del proyecto

{
  "dependencies": [ "fmt", "zlib" ],
  "builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
  "overrides": [
    { "name": "zlib", "version": "1.2.8" }
  ]
}

Archivo de configuración

vcpkg se puede configurar a través de un vcpkg-configuration.json archivo para agregar más registros de paquetes o puertos de superposición y ubicaciones tripletas .

Ejemplo de archivo de configuración

{
  "default-registry": {
    "kind": "git",
    "baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/northwindtraders/vcpkg-registry",
      "baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
      "packages": [ "beicode", "beison" ]
    }
  ],
  "overlay-ports": [
    "C:\\dev\\my_vcpkg_ports"
  ]
}

Instalación de paquetes en modo de manifiesto

Para instalar paquetes mediante un archivo de manifiesto, use el vcpkg install comando sin argumentos de paquete. El comando debe ejecutarse desde un directorio que contenga un archivo de manifiesto (vcpkg.json) o la ruta de acceso a un archivo de manifiesto proporcionado mediante la --x-manifest-root=<path> opción .

Los paquetes instalados en el modo de manifiesto no se instalarán en el directorio global installed , ya que lo hacen en modo clásico. En su lugar, cada manifiesto obtiene su propio directorio de instalación denominado vcpkg_installed; el vcpkg_installed directorio se crea en el mismo directorio que contiene el archivo de manifiesto.

Tener árboles de instalación independientes por manifiesto permite separar las dependencias entre distintos proyectos. Esto evita una limitación fundamental del modo clásico, que solo permite instalar una versión de cada puerto. El modo de manifiesto mantiene las versiones de los puertos separados por proyecto.

Uso de características en manifiestos de proyecto

Los archivos de manifiesto pueden definir conjuntos aditivos de funcionalidad, comportamiento y dependencias mediante el uso de "características".

En los proyectos, puede definir características para habilitar o deshabilitar las dependencias que se aplican a partes del proyecto. Por ejemplo, si el proyecto contiene varios componentes, puede que desee mantener dependencias comunes en la "dependencies" lista, pero limitar algunas otras a sus respectivos componentes.

Para habilitar las características del proyecto, puede usar uno de los métodos siguientes:

Ejemplo: Características en manifiestos de proyecto

{
  "name": "my-game",
  "dependencies": [ "grpc" ],
  "features": {
    "client": {
      "description": "client game executable",
      "dependencies": [ "sdl2", "bullet3" ]
    }, 
    "server": {
      "description": "multiplayer server executable",
      "dependencies": [ "proxygen" ]
    }, 
    "tests": {
      "description": "development tests",
      "dependencies": [ "gtest" ]
    }
  }
} 

Para compilar solo las dependencias del componente "cliente" se ejecutan:

vcpkg install --x-feature=client

Pasos siguientes

Estas son algunas tareas que se van a probar a continuación: