Tutorial: Instalación de una dependencia desde la línea de comandos
Sugerencia
Consulte "Instalación de una dependencia desde un archivo de manifiesto" para obtener el método recomendado para instalar las dependencias.
Advertencia
Algunas características de vcpkg no están disponibles en modo clásico.
vcpkg tiene dos modos de operación: modo clásico y modo de manifiesto. En este artículo se describe cómo instalar paquetes mediante el modo clásico. Para la mayoría de los usuarios, se recomienda usar el modo de manifiesto en su lugar.
En el modo clásico, se usa vcpkg como una interfaz de línea de comandos para instalar las dependencias en un directorio de instalación común. Normalmente, ubicado en %VCPKG_ROOT%/installed
, donde %VCPKG_ROOT%
es el directorio de instalación de vcpkg.
En este tutorial, aprenderá a:
Requisitos previos
- vcpkg
- Un terminal
- Editor de código
- Un compilador de C++
- (Opcional) CMake o MSBuild
1 - Creación de un proyecto
En una nueva carpeta, cree un archivo de origen denominado main.cxx
con este contenido:
#include <cxxopts.hpp>
#include <fmt/format.h>
#include <range/v3/view.hpp>
namespace view = ranges::views;
int fib(int x)
{
int a = 0, b = 1;
for (int it : view::repeat(0) | view::take(x))
{
(void)it;
int tmp = a;
a += b;
b = tmp;
}
return a;
}
int main(int argc, char **argv)
{
cxxopts::Options options("fibo", "Print the fibonacci sequence up to a value 'n'");
options.add_options()("n,value", "The value to print to", cxxopts::value<int>()->default_value("10"));
auto result = options.parse(argc, argv);
auto n = result["value"].as<int>();
for (int x : view::iota(1) | view::take(n))
{
fmt::print("fib({}) = {}\n", x, fib(x));
}
}
El código hace referencia a las bibliotecas de código abierto: cxxopts
, fmt
y range-v3
; que están disponibles en el registro público vcpkg en https://github.com/Microsoft/vcpkg.
2 - Integración de vcpkg con el sistema de compilación
En este paso se muestra cómo integrar vcpkg con CMake o MSBuild, de modo que las dependencias del proyecto se instalen o restauren automáticamente cada vez que compile el proyecto.
Si usa un sistema de compilación diferente, vaya al paso siguiente: Instalar dependencias.
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. Use vcpkg integrate remove
para quitar la integración en todo el sistema de MSBuild.
Este método de integración agrega automáticamente paquetes instalados por vcpkg a las siguientes propiedades del proyecto: Include Directories
, Link Directories
y Link Libraries
. 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.
3- Instalación de dependencias
El código hace referencia a las bibliotecas de código abierto: cxxopts
, fmt
y range-v3
; todas están disponibles en el registro público vcpkg en https://github.com/Microsoft/vcpkg.
Para instalar estos paquetes, use el vcpkg install
comando .
vcpkg install cxxopts fmt range-v3
$ ./vcpkg install cxxopts fmt range-v3
Computing installation plan...
The following packages will be built and installed:
cxxopts:x64-windows -> 3.1.1
fmt:x64-windows -> 10.0.0
range-v3:x64-windows -> 0.12.0#1
* vcpkg-cmake:x64-windows -> 2023-05-04
* vcpkg-cmake-config:x64-windows -> 2022-02-06#1
Additional packages (*) will be modified to complete this operation.
(omitted)
cxxopts provides CMake targets:
# this is heuristically generated, and may not be correct
find_package(cxxopts CONFIG REQUIRED)
target_link_libraries(main PRIVATE cxxopts::cxxopts)
The package fmt provides CMake targets:
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE fmt::fmt)
# Or use the header-only version
find_package(fmt CONFIG REQUIRED)
target_link_libraries(main PRIVATE fmt::fmt-header-only)
range-v3 provides CMake targets:
# this is heuristically generated, and may not be correct
find_package(range-v3 CONFIG REQUIRED)
target_link_libraries(main PRIVATE range-v3::meta range-v3::concepts range-v3::range-v3)
4 - Compilación del proyecto
Importante
Asegúrese de que el triplete de los paquetes instalados coincide con la configuración del proyecto. Use x64-windows
o x64-windows-static
para los proyectos de 64 bits o x86-windows
x86-windows-static
para los proyectos de 32 bits.
Con la integración en todo el sistema habilitada, solo tiene que ejecutar msbuild
para compilar el proyecto:
PS D:\projects\manifest-example> msbuild
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework
Build started 8/13/2023 3:07:36 PM.
Project "D:\projects\manifest-example\manifest-example.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
(omitted)
PrepareForBuild:
(omitted)
InitializeBuildStatus:
(omitted)
ComputeStdModulesCompileInputs:
(omitted)
SetModuleDependencies:
VcpkgTripletSelection:
Using triplet "x64-windows" from "D:\vcpkg\installed\x64-windows\"
Using normalized configuration "Debug"
ClCompile:
(omitted)
Link:
(omitted)
AppLocalFromInstalled:
pwsh.exe -ExecutionPolicy Bypass -noprofile -File "D:\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "D:\projects\manifest-example\x64\Debug\manifest-example.exe"
"D:\vcpkg\installed\x64-windows\debug\bin" "x64\Debug\manifest-example.tlog\manifest-example.write.1u.tlog" "x64\Debug\vcpkg.applocal.log"
D:\projects\manifest-example\x64\Debug\fmtd.dll
FinalizeBuildStatus:
Deleting file "x64\Debug\manifest-example.tlog\unsuccessfulbuild".
Touching "x64\Debug\manifest-example.tlog\manifest-example.lastbuildstate".
Done Building Project "D:\projects\manifest-example\manifest-example.vcxproj" (default targets).
Done Building Project "D:\projects\manifest-example\manifest-example.sln" (default targets).
Build succeeded.
Pasos siguientes
En este tutorial, instaló dependencias para un proyecto sencillo mediante vcpkg como una interfaz de línea de comandos.
Estas son algunas tareas adicionales para probar a continuación:
- Instalación de paquetes mediante un archivo de manifiesto
- Instalación de paquetes para plataformas personalizadas mediante tripletas
- Bloquear las versiones de las compilaciones repetibles mediante el control de versiones
- Reutilización de archivos binarios en ejecuciones de integración continua mediante el almacenamiento en caché binario
- Administración de las bibliotecas privadas mediante registros personalizados