¿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. Los archivos de manifiesto deben tener el vcpkg.json
nombre.
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.
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.
{
"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
}
]
}
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.
{
"dependencies": [ "fmt", "zlib" ],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "zlib", "version": "1.2.8" }
]
}
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 .
{
"default-registry": {
"kind": "git",
"baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
"repository": "https://github.com/microsoft/vcpkg"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/microsoft/vcpkg-docs",
"reference": "vcpkg-registry",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"packages": [ "beicode", "beison" ]
}
],
"overlay-ports": [
"C:\\dev\\my_vcpkg_ports"
]
}
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.
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:
- Pase la
--x-feature
opción alvpckg install
comando. - En CMake, establezca antes de
VCPKG_MANIFEST_FEATURES
la primera llamada aproject()
. - En MSBuild, pase la
--x-feature
opción a través de "VcpkgAdditionalInstallOptions.
{
"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
Estas son algunas tareas que se van a probar a continuación:
- Completar el tutorial del modo de manifiesto
- Leer y
vcpkg.json
vcpkg-configuration.json
artículos de referencia. - Bloquear las versiones de las compilaciones repetibles mediante el control de versiones
Comentarios de vcpkg
vcpkg es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios: