Dela via


Självstudie: Installera ett beroende från kommandoraden

Tips

Se "Installera ett beroende från en manifestfil" för den rekommenderade metoden för att installera dina beroenden.

Varning

Vissa vcpkg-funktioner är inte tillgängliga i klassiskt läge.

vcpkg har två åtgärdslägen: klassiskt läge och manifestläge. I den här artikeln beskrivs hur du installerar paket med klassiskt läge. För de flesta användare rekommenderar vi att du använder manifestläge i stället.

I klassiskt läge använder du vcpkg som kommandoradsgränssnitt för att installera dina beroenden i en gemensam installationskatalog. Finns vanligtvis i %VCPKG_ROOT%/installed, där %VCPKG_ROOT% är vcpkg-installationskatalogen.

I den här handledningen lär du dig:

Förutsättningar

  • vcpkg
  • En terminal
  • En kodredigerare
  • En C++-kompilator
  • (Valfritt) CMake eller MSBuild

1 – Skapa ett projekt

I en ny mapp skapar du en källfil med namnet main.cxx med följande innehåll:

#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));
  }
}

Koden refererar till biblioteken med öppen källkod: cxxopts, fmtoch range-v3; som alla är tillgängliga i det offentliga registret vcpkg på https://github.com/Microsoft/vcpkg.

2 – Integrera vcpkg med byggsystemet

I det här steget visar vi hur du integrerar vcpkg med CMake eller MSBuild, så att dina projektberoenden installeras eller återställs automatiskt när du skapar projektet.

Om du använder ett annat byggsystem går du vidare till nästa steg: Installera beroenden.

Om du vill använda vcpkg i dina MSBuild-projektkör du följande kommando:

vcpkg integrate install

Du behöver bara köra kommandot vcpkg integrate install första gången du vill aktivera MSBuild-integrering. Detta möjliggör MSBuild-integrering för alla befintliga och framtida projekt. Använd vcpkg integrate remove för att ta bort MSBuild-systemomfattande integrering.

Den här integreringsmetoden lägger automatiskt till vcpkg-installerade paket i följande projektegenskaper: Include Directories, Link Directoriesoch Link Libraries. Dessutom skapar detta en åtgärd efter bygget som säkerställer att alla nödvändiga DLL:er kopieras till utdatamappen build. Detta fungerar för alla lösningar och projekt med Visual Studio 2015 eller senare.

3 – Installera beroenden

Koden refererar till biblioteken med öppen källkod: cxxopts, fmtoch range-v3; dessa är alla tillgängliga i det offentliga registret vcpkg på https://github.com/Microsoft/vcpkg.

Om du vill installera dessa paket använder du kommandot 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 – Skapa projektet

Viktig

Kontrollera att triplet av dina installerade paket matchar projektets konfiguration. Använd x64-windows eller x64-windows-static för dina 64-bitarsprojekt och x86-windows eller x86-windows-static för dina 32-bitarsprojekt.

När systemomfattande integrering är aktiverat kör du bara msbuild för att skapa projektet:

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.

Nästa steg

I den här handledningen har du installerat beroenden för ett enkelt projekt genom att använda vcpkg som kommandoradsverktyg.

Här följer några ytterligare uppgifter att prova härnäst: