Självstudie: Installera ett beroende från en manifestfil
vcpkg har två åtgärdslägen: klassiskt läge och manifestläge. Den här artikeln beskriver hur du installerar paket med manifestläge, vilket är det rekommenderade arbetsflödet för de flesta användare.
I manifestläge deklarerar du projektets direkta beroenden i en manifestfil med namnet vcpkg.json
.
Manifestfiler har en egen vcpkg_installed
katalog där de installerar beroenden, till skillnad från klassiskt läge, där alla paket installeras i en gemensam %VCPKG_ROOT%/installed
katalog. Därför kan varje projekt ha ett eget manifest och en egen uppsättning beroenden som inte står i konflikt med andra projekts beroenden.
Manifestläget krävs också för att använda avancerade funktioner som versionshantering och anpassade register.
I den här handledningen får du lära dig att:
Förutsättningar
- vcpkg
- En terminal
- En kodredigerare
- En C++-kompilator
- (Valfritt) CMake eller MSBuild
1 – Skapa ett projekt med ett manifest
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.
Om du vill deklarera dessa beroenden skapar du en fil med namnet vcpkg.json
i samma katalog som projektet:
vcpkg.json
:
{
"dependencies": [
"cxxopts",
"fmt",
"range-v3"
]
}
Du behöver bara ange dina direkta beroenden i "dependencies"
listan. När den körs vcpkg löser och installerar alla nödvändiga transitiva beroenden.
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
Om du använder CMake eller MSBuild och följde föregående steg kan du gå vidare till nästa steg: Skapa projektet.
Om du använder ett annat byggsystem eller vill installera beroendena manuellt behöver du bara köra vcpkg install
i katalogen som innehåller manifestfilen.
PS D:\projects\manifest-example> vcpkg install
Detecting compiler hash for triplet x64-windows...
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.
Installing 1/5 vcpkg-cmake-config:x64-windows...
Installing 2/5 vcpkg-cmake:x64-windows...
Installing 3/5 cxxopts:x64-windows...
Installing 4/5 fmt:x64-windows...
Installing 5/5 range-v3:x64-windows...
Total install time: 48 s
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)
När kommandot har slutförts finns alla byggda paket i en vcpkg_installed
katalog. Den specifika platsen för den här katalogen beror på ditt byggsystem. vanligtvis i byggsystemets standardutdatamapp eller bredvid din vcpkg.json
-fil.
4 – Skapa projektet
Som standard är manifestläget inaktiverat i MSBuild-projekt.
Om du vill aktivera manifest i projektet anger du egenskapen VcpkgEnableManifest
i filen .vcxproj
:
<PropertyGroup Label="Vcpkg">
<VcpkgEnableManifest>true</VcpkgEnableManifest>
</PropertyGroup>
Du kan också aktivera manifestläge i DITT MSBuild-anrop genom att skicka msbuild /p:VcpkgEnableManifest=true
som en parameter.
PS D:\projects\manifest-example> msbuild /p:VcpkgEnableManifest=true
MSBuild version 17.7.0-preview-23319-02+6829506b8 for .NET Framework
Build started 8/11/2023 11:29:50 AM.
Project "D:\projects\manifest-example\manifest-example.sln" on node 1 (default targets).
ValidateSolutionConfiguration:
Building solution configuration "Debug|x64".
Project "D:\projects\manifest-example\manifest-example.sln" (1) is building "D:\projects\manifest-example\manifest-example.vcxproj" (2) on node 1 (default targets).
PrepareForBuild:
(omitted)
InitializeBuildStatus:
(omitted)
ComputeStdModulesCompileInputs:
(omitted)
SetModuleDependencies:
Creating directory "x64\Debug\manifest.ceffc6eb_MD.tlog\".
VcpkgTripletSelection:
Using triplet "x64-windows" from "D:\projects\manifest-example\vcpkg_installed\x64-windows\x64-windows\"
Using normalized configuration "Debug"
VcpkgInstallManifestDependencies:
Installing vcpkg dependencies to D:\projects\manifest-example\vcpkg_installed\x64-windows\
Creating directory "D:\projects\manifest-example\vcpkg_installed\x64-windows\".
"D:\vcpkg\vcpkg.exe" install --x-wait-for-lock --triplet "x64-windows" --vcpkg-root "D:\vcpkg\" "--x-manifest-root=D:\projects\manifest-example\" "--x-install-root=D:\projects\manifest-example\vcpkg_installed\x64-windows\"
"D:\vcpkg\vcpkg.exe" install --x-wait-for-lock --triplet "x64-windows" --vcpkg-root "D:\vcpkg\" "--x-manifest-root=D:\projects\manifest-example\" "--x-install-root=D:\projects\manifest-example\vcpkg_installed\x64-windows\"
Detecting compiler hash for triplet x64-windows...
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
(omitted)
ClCompile:
(omitted)
Link:
(omitted)
AppLocalFromInstalled:
pwsh.exe -ExecutionPolicy Bypass -noprofile -File "D:\vcpkg\scripts\buildsystems\msbuild\applocal.ps1" "D:\projects\manif
est-mode-msbuild\x64\Debug\manifest-example.exe" "D:\projects\manifest-example\vcpkg_installed\x64-windows\x64-windows\debug\bin"
"x64\Debug\manifest.ceffc6eb.tlog\manifest-example.write.1u.tlog" "x64\Debug\vcpkg.applocal.log"
D:\projects\manifest-example\x64\Debug\fmtd.dll
FinalizeBuildStatus:
(omitted)
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 guiden har du installerat beroenden för ett enkelt projekt med hjälp av en manifestfil.
Här följer några ytterligare uppgifter att prova härnäst:
- Installera paket för anpassade plattformar, kompilatorer eller byggarkitekturer med tripletter
- Lås dina versioner för repeterbara versioner med versionshantering
- Återanvända binärfiler i lokala eller kontinuerliga integreringskörningar med binär cachelagring
- Hantera dina privata bibliotek med hjälp av anpassade register