Condividi tramite


Esercitazione: Installare una dipendenza dalla riga di comando

Suggerimento

Vedere "Installare una dipendenza da un file manifesto" per il metodo consigliato di installazione delle dipendenze.

Avvertimento

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, fmte range-v3; che sono tutti disponibili nel registro pubblico vcpkg in 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 stai usando un sistema di compilazione diverso, salta al passaggio successivo: Installare le dipendenze.

Per usare vcpkg nei progetti MSBuild, eseguire il comando seguente:

vcpkg integrate install

È sufficiente eseguire il comando vcpkg integrate install la prima volta che si vuole abilitare l'integrazione 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 pacchetti installati da vcpkg alle proprietà del progetto seguenti: Include Directories, Link Directoriese 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, fmte range-v3; questi sono tutti disponibili nel Registro di sistema pubblico vcpkg in https://github.com/Microsoft/vcpkg.

Per installare questi pacchetti, usare il comando vcpkg install.

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

Assicurati che la tripletta 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
  • Blocca le versioni per le compilazioni ripetibili usando il versioning
  • Riutilizzare i file binari nelle esecuzioni di integrazione continua mediante la memorizzazione nella cache binaria
  • Gestisci le tue librerie private usando registri personalizzati