Leggere in inglese

Condividi tramite


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, fmte 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 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. 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: