Delen via


Handleiding: Installeer een afhankelijkheid vanaf de command line

Tip

Zie 'Een afhankelijkheid installeren vanuit een manifestbestand' voor de aanbevolen methode voor het installeren van uw afhankelijkheden.

Waarschuwing

Sommige vcpkg-functies zijn niet beschikbaar in de klassieke modus.

vcpkg heeft twee bewerkingsmodi: klassieke modus en manifestmodus. In dit artikel wordt beschreven hoe u pakketten installeert met de klassieke modus. Voor de meeste gebruikers raden we u aan in plaats daarvan de manifestmodus te gebruiken.

In de klassieke modus gebruikt u vcpkg als opdrachtregelinterface om uw afhankelijkheden te installeren in een algemene installatiemap. Meestal bevindt zich in %VCPKG_ROOT%/installed, waar %VCPKG_ROOT% de installatiemap van vcpkg is.

In deze zelfstudie leert u het volgende:

Voorwaarden

  • vcpkg
  • Een terminal
  • Een code-editor
  • Een C++-compiler
  • (Optioneel) CMake of MSBuild

1 - Een project maken

Maak in een nieuwe map een bronbestand met de naam main.cxx met de volgende inhoud:

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

De code verwijst naar de opensource-bibliotheken: cxxopts, fmten range-v3; die allemaal beschikbaar zijn in het openbare vcpkg-register op https://github.com/Microsoft/vcpkg.

2 - Vcpkg integreren met uw buildsysteem

In deze stap laten we u zien hoe u vcpkg integreert met CMake of MSBuild, zodat uw projectafhankelijkheden automatisch worden geïnstalleerd of hersteld wanneer u het project bouwt.

Als u een ander buildsysteem gebruikt, gaat u verder met de volgende stap: Afhankelijkheden installeren.

Als u vcpkg wilt gebruiken in uw MSBuild-projecten, voert u de volgende opdracht uit:

vcpkg integrate install

U hoeft de opdracht vcpkg integrate install alleen uit te voeren wanneer u MSBuild-integratie de eerste keer wilt inschakelen. Hierdoor is MSBuild-integratie mogelijk voor al uw bestaande en toekomstige projecten. Gebruik vcpkg integrate remove om msBuild systeembrede integratie te verwijderen.

Met deze integratiemethode worden automatisch vcpkg-geïnstalleerde pakketten toegevoegd aan de volgende projecteigenschappen: Include Directories, Link Directoriesen Link Libraries. Daarnaast wordt er een actie na de build gemaakt die ervoor zorgt dat alle vereiste DLL's worden gekopieerd naar de uitvoermap van de build. Dit werkt voor alle oplossingen en projecten met Visual Studio 2015 of hoger.

3 - Afhankelijkheden installeren

De code verwijst naar de opensource-bibliotheken: cxxopts, fmten range-v3; deze zijn allemaal beschikbaar in het openbare vcpkg-register op https://github.com/Microsoft/vcpkg.

Gebruik de opdracht vcpkg install om deze pakketten te installeren.

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 - Het project bouwen

Belangrijk

Zorg ervoor dat de triplet van de geïnstalleerde pakketten overeenkomt met de configuratie van uw project. Gebruik x64-windows of x64-windows-static voor uw 64-bits projecten en x86-windows of x86-windows-static voor uw 32-bits projecten.

Als systeembrede integratie is ingeschakeld, hoeft u alleen msbuild uit te voeren om het project te bouwen:

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.

Volgende stappen

In deze zelfstudie hebt u afhankelijkheden voor een eenvoudig project geïnstalleerd met behulp van vcpkg als opdrachtregelinterface.

Hier volgen enkele extra taken om het volgende te proberen: