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
, fmt
och 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 Directories
och 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
, fmt
och 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:
- Installera paket med hjälp av en -manifestfil
- Installera paket för anpassade plattformar med tripletter
- Lås dina versioner för reproducerbara byggen med hjälp av versionshantering
- Återanvänd binärfiler över kontinuerliga integreringskörningar med cachelagring
- Hantera dina privata bibliotek med hjälp av anpassade register