vcpkg en proyectos de MSBuild
Métodos de integración
Integración de todo el usuario
Para usar vcpkg en los proyectos de MSBuild, ejecute el siguiente comando:
vcpkg integrate install
Solo tiene que ejecutar el vcpkg integrate install
comando la primera vez que quiera habilitar la integración de MSBuild. Esto permite la integración de MSBuild para todos los proyectos existentes y futuros.
Si tiene varias instancias de vcpkg, puede usar el vcpkg integrate install
comando para actualizar la instancia de vcpkg que se usa en MSBuild. Use vcpkg integrate remove
para quitar la integración en todo el usuario de MSBuild.
Este método de integración agrega automáticamente paquetes instalados por vcpkg a las siguientes propiedades del proyecto: Incluir directorios, Directorios de vínculo y Bibliotecas de vínculos. Además, esto crea una acción posterior a la compilación que garantiza que los archivos DLL necesarios se copien en la carpeta de salida de compilación. Esto funciona para todas las soluciones y proyectos con Visual Studio 2015 o versiones posteriores.
Esto es todo lo que necesita hacer para la gran mayoría de las bibliotecas. Sin embargo, algunas bibliotecas realizan comportamientos conflictivos, como redefinir main()
. Puesto que necesita elegir por proyecto cuál de estas opciones en conflicto desea, debe agregar manualmente esas bibliotecas a las entradas del enlazador.
Estos son algunos ejemplos en los que es necesario vincular manualmente (no una lista exhaustiva):
- Gtest proporciona
gtest
,gmock
,gtest_main
ygmock_main
- SDL2 proporciona
SDL2main
- SFML proporciona
sfml-main
- Boost.Test proporciona
boost_test_exec_monitor
Para obtener una lista completa de todos los paquetes instalados, ejecute vcpkg owns manual-link
.
Importación .props
y .targets
vcpkg también se puede integrar en proyectos de MSBuild importando explícitamente los scripts/buildsystems/vcpkg.props
archivos y scripts/buildsystems/vcpkg.targets
en cada .vcxproj
. Mediante el uso de rutas de acceso relativas, esto permite que vcpkg los consuma un submódulo y los usuarios los adquieran automáticamente cuando ejecutan git clone
.
La manera más fácil de agregarlas a todos los proyectos de la solución es crear Directory.Build.props
y Directory.Build.targets
archivos en la raíz del repositorio.
En los ejemplos siguientes se supone que están en la raíz del repositorio con un submódulo de microsoft/vcpkg
en vcpkg
.
Por ejemplo, Directory.Build.props
<Project>
<Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.props" />
</Project>
Por ejemplo, Directory.Build.targets
<Project>
<Import Project="$(MSBuildThisFileDirectory)vcpkg\scripts\buildsystems\msbuild\vcpkg.targets" />
</Project>
Consulte la sección Personalización de la compilación de la documentación oficial de MSBuild para obtener más información sobre Directory.Build.targets
y Directory.Build.props
.
Paquete NuGet vinculado
Nota:
Este enfoque no se recomienda para los nuevos proyectos, ya que dificulta su uso compartido con otros usuarios. Para obtener un paquete NuGet portátil y independiente, consulte .export command
Los proyectos de VS también se pueden integrar a través de un paquete NuGet. Esto modificará el archivo de proyecto, por lo que no se recomienda este enfoque para los proyectos de código abierto.
PS D:\src\vcpkg> .\vcpkg integrate project
Created nupkg: D:\src\vcpkg\scripts\buildsystems\vcpkg.D.src.vcpkg.1.0.0.nupkg
With a project open, go to Tools->NuGet Package Manager->Package Manager Console and paste:
Install-Package vcpkg.D.src.vcpkg -Source "D:/src/vcpkg/scripts/buildsystems"
Nota:
El paquete NuGet generado no contiene las bibliotecas reales. En su lugar, actúa como un acceso directo (o vínculo simbólico) a la instalación de vcpkg y se actualizará "automáticamente" con los cambios (instalar o quitar) en las bibliotecas. No es necesario volver a generar ni actualizar el paquete NuGet.
Configuración común
VcpkgEnabled
(Use Vcpkg)
Se puede establecer en "false" para deshabilitar explícitamente la integración de vcpkg para el proyecto.
VcpkgConfiguration
(Configuración de Vcpkg)
Si los nombres de configuración son demasiado complejos para que vcpkg pueda adivinar correctamente, puede asignar esta propiedad a Release
o Debug
indicar explícitamente a vcpkg qué variante de bibliotecas desea consumir.
VcpkgEnableManifest
(Usar manifiesto Vcpkg)
Esta propiedad debe establecerse true
en para poder consumir desde un archivo local vcpkg.json
. Si se establece en false
, se omitirá cualquier archivo local vcpkg.json
.
Actualmente, este valor predeterminado es false
, pero lo hará true
en el futuro.
VcpkgTriplet
(Triplet)
Esta propiedad controla el triplete desde el que se consumirán bibliotecas, como x64-windows-static
o arm64-windows
.
Si no se establece explícitamente, vcpkg deducirá el triplete correcto en función de la configuración de Visual Studio. vcpkg solo deducirá los triples que usan la vinculación dinámica de la biblioteca y la vinculación dinámica de CRT; si desea dependencias estáticas o usar el CRT estático (/MT
), deberá establecer el triplete manualmente.
Puede ver el triplete deducido automáticamente estableciendo el nivel de detalle de MSBuild en Normal o superior:
Acceso directo: Ctrl+Q "compilar y ejecutar"
Herramientas: opciones:>> proyectos y soluciones:> compilación y ejecución:> detalle de la salida de la compilación del proyecto de MSBuild
Consulte también Triplets
VcpkgHostTriplet
(Triplet host)
Esto se puede establecer en un triplete personalizado que se usará para resolver las dependencias del host.
Si no se establece, este valor predeterminado será el triplete "nativo" (x64-windows).
Consulte también Dependencias de host.
VcpkgInstalledDir
(Directorio instalado)
Esta propiedad define la ubicación de vcpkg desde la que se instalarán y consumirán bibliotecas.
En el modo de manifiesto, este valor predeterminado es $(VcpkgManifestRoot)\vcpkg_installed\$(VcpkgTriplet)\
. En el modo clásico, este valor predeterminado es $(VcpkgRoot)\installed\
.
VcpkgApplocalDeps
(Dll de implementación local de aplicaciones)
Esta propiedad habilita o deshabilita la detección y copia de archivos DLL dependientes del árbol instalado vcpkg en el directorio de salida del proyecto.
VcpkgXUseBuiltInApplocalDeps
(Uso de la implementación integrada de app-local)
Esta propiedad, cuando está habilitada, usa la implementación experimental de dll de app-local integrada de vcpkg cuando se implementan archivos DLL locales de la aplicación. Esta propiedad se quitará y no tendrá ningún efecto cuando la implementación integrada ya no sea experimental.
Esta propiedad no tiene ningún efecto cuando $(VcpkgApplocalDeps)
es false.
Configuración del modo manifiesto
Para usar manifiestos (vcpkg.json
) con MSBuild, primero debe usar uno de los métodos de integración anteriores. A continuación, agregue un vcpkg.json encima del archivo de proyecto (por ejemplo, en la raíz del repositorio de origen) y establezca la propiedad VcpkgEnableManifest
true
en . Puede establecer esta propiedad a través del IDE en Propiedades>del proyecto Vcpkg>Usar manifiesto Vcpkg. Es posible que tenga que volver a cargar el IDE para ver la página de propiedades vcpkg.
vcpkg se ejecutará durante la compilación del proyecto e instalará las dependencias enumeradas en vcpkg_installed/$(VcpkgTriplet)/
adyacentes al vcpkg.json
archivo; estas bibliotecas se incluirán automáticamente en los proyectos de MSBuild y se vincularán automáticamente a ellos.
Problemas conocidos
- Visual Studio 2015 no realiza un seguimiento correcto de las modificaciones en los
vcpkg.json
archivos yvcpkg-configuration.json
y, a menos que se edite ,.cpp
no responderá a los cambios.
VcpkgAdditionalInstallOptions
(Opciones adicionales)
Al usar un manifiesto, esta opción especifica marcas de línea de comandos adicionales para pasar a la invocación subyacente de la herramienta vcpkg. Esto se puede usar para acceder a las características que aún no se han expuesto a través de otra opción.
VcpkgManifestInstall
(Instalar dependencias de Vcpkg)
Esta propiedad se puede establecer en false
para deshabilitar la restauración automática de dependencias durante la compilación del proyecto. Las dependencias se deben restaurar manualmente a través de la línea de comandos vcpkg por separado.