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
, fmt
en 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 Directories
en 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
, fmt
en 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:
- Pakketten installeren met behulp van een manifestbestand
- Pakketten voor aangepaste platforms installeren met triplets
- Zet uw versies vast voor reproduceerbare builds met versiebeheer
- Binaire bestanden opnieuw gebruiken in Continuous Integration met behulp van binaire caching
- Uw persoonlijke bibliotheken beheren met aangepaste registers