Esercitazione: Installare una dipendenza dalla riga di comando
Suggerimento
Per il metodo consigliato per installare le dipendenze, vedere "Installare una dipendenza da un file manifesto".
Avviso
Alcune funzionalità di vcpkg non sono disponibili in modalità classica.
vcpkg ha due modalità operativa: la modalità classica e la modalità manifesto. Questo articolo descrive come installare i pacchetti usando la modalità classica. Per la maggior parte degli utenti è consigliabile usare invece la modalità manifesto.
In modalità classica si usa vcpkg come interfaccia della riga di comando per installare le dipendenze in una directory di installazione comune. In genere, si trova in %VCPKG_ROOT%/installed
, dove %VCPKG_ROOT%
è la directory di installazione di vcpkg.
In questa esercitazione si apprenderà come:
Prerequisiti
- vcpkg
- Un terminale
- Editor di codice
- Compilatore C++
- (Facoltativo) CMake o MSBuild
1 - Creare un progetto
In una nuova cartella creare un file di origine denominato main.cxx
con questi contenuti:
#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));
}
}
Il codice fa riferimento alle librerie open source: cxxopts
, fmt
e range-v3
, che sono tutte disponibili nel registro pubblico vcpkg all'indirizzo https://github.com/Microsoft/vcpkg.
2 - Integrare vcpkg con il sistema di compilazione
In questo passaggio viene illustrato come integrare vcpkg con CMake o MSBuild, in modo che le dipendenze del progetto vengano installate o ripristinate automaticamente ogni volta che si compila il progetto.
Se si usa un sistema di compilazione diverso, passare al passaggio successivo: Installare le dipendenze.
Per usare vcpkg nei progetti MSBuild, eseguire il comando seguente:
vcpkg integrate install
È sufficiente eseguire il comando la prima volta che si vuole abilitare l'integrazione vcpkg integrate install
di MSBuild. In questo modo si abilita l'integrazione di MSBuild per tutti i progetti esistenti e futuri. Usare vcpkg integrate remove
per rimuovere l'integrazione a livello di sistema di MSBuild.
Questo metodo di integrazione aggiunge automaticamente i pacchetti installati da vcpkg alle proprietà del progetto seguenti: Include Directories
, Link Directories
e Link Libraries
. Viene inoltre creata un'azione di post-compilazione che garantisce che tutte le DLL necessarie vengano copiate nella cartella di output della compilazione. Questa soluzione funziona per tutte le soluzioni e i progetti che usano Visual Studio 2015 o versione successiva.
3 - Installare le dipendenze
Il codice fa riferimento alle librerie open source: cxxopts
, fmt
e range-v3
. Sono tutti disponibili nel registro pubblico vcpkg all'indirizzo https://github.com/Microsoft/vcpkg.
Per installare questi pacchetti, usare il 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 - Compilare il progetto
Importante
Assicurarsi che il triplo dei pacchetti installati corrisponda alla configurazione del progetto. Usare x64-windows
o x64-windows-static
per i progetti a 64 bit e x86-windows
o x86-windows-static
per i progetti a 32 bit.
Con l'integrazione a livello di sistema abilitata, è sufficiente eseguire msbuild
per compilare il progetto:
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.
Passaggi successivi
In questa esercitazione sono state installate dipendenze per un progetto semplice usando vcpkg come interfaccia della riga di comando.
Ecco alcune attività aggiuntive da provare:
- Installare i pacchetti usando un file manifesto
- Installare pacchetti per piattaforme personalizzate usando triplette
- Bloccare le versioni per le build ripetibili usando il controllo delle versioni
- Riutilizzare i file binari nelle esecuzioni di integrazione continua usando la memorizzazione nella cache binaria
- Gestire le librerie private usando registri personalizzati