Tutoriel : Installer une dépendance à partir d’un fichier manifeste
Article
vcpkg a deux modes d’opération : le mode classique et le mode manifeste. Cet article explique comment installer des packages à l’aide du mode manifeste, qui est le flux de travail recommandé pour la plupart des utilisateurs.
En mode manifeste, vous déclarez les dépendances directes de votre projet dans un fichier manifeste nommé vcpkg.json.
Les fichiers manifestes ont leur propre vcpkg_installed répertoire où ils installent des dépendances, contrairement au mode classique, où tous les packages sont installés dans un répertoire commun %VCPKG_ROOT%/installed . Par conséquent, chaque projet peut avoir son propre manifeste et son propre ensemble de dépendances qui ne sont pas en conflit avec les dépendances d’autres projets.
Le mode manifeste est également nécessaire pour utiliser des fonctionnalités avancées telles que le contrôle de version et les registres personnalisés.
Dans un nouveau dossier, créez un fichier source nommé main.cxx avec le contenu suivant :
#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));
}
}
Le code fait référence aux bibliothèques open source : cxxopts, fmtet range-v3; qui sont toutes disponibles dans le registre public vcpkg à l’adresse https://github.com/Microsoft/vcpkg.
Pour déclarer ces dépendances, créez un fichier nommé vcpkg.json dans le même répertoire que votre projet :
Vous devez uniquement spécifier vos dépendances directes dans la "dependencies" liste. Lorsqu’il s’exécute, vcpkg résout et installe toutes les dépendances transitives requises.
2 - Intégrer vcpkg à votre système de build
Dans cette étape, nous vous montrons comment intégrer vcpkg à CMake ou MSBuild afin que vos dépendances de projet soient automatiquement installées ou restaurées chaque fois que vous générez le projet.
Si vous utilisez un autre système de génération, passez à l’étape suivante : Installez les dépendances.
Vous devez uniquement exécuter la vcpkg integrate install commande la première fois que vous souhaitez activer l’intégration MSBuild. Cela permet l’intégration de MSBuild pour tous vos projets existants et futurs. Permet vcpkg integrate remove de supprimer l’intégration à l’échelle du système MSBuild.
Cette méthode d’intégration ajoute automatiquement des packages installés par vcpkg aux propriétés de projet suivantes : Include Directories, Link Directorieset Link Libraries. En outre, cela crée une action post-build qui garantit que toutes les DLL requises sont copiées dans le dossier de sortie de build. Cela fonctionne pour toutes les solutions et projets à l’aide de Visual Studio 2015 ou version ultérieure.
Pour utiliser vcpkg dans vos projets CMake, vous devez définir la variable pour utiliser le CMAKE_TOOLCHAIN_FILE fichier de chaîne d’outils CMake de vcpkg. La chaîne d’outils vcpkg se trouve dans %VCPKG_ROOT%/scripts/buildsystems/vcpkg.cmake, où %VCPKG_ROOT% se trouve votre chemin d’installation vcpkg.
Utilisez l’une de ces méthodes pour définir le fichier de chaîne d’outils :
Définissez le CMAKE_TOOLCHAIN_FILE fichier de votre CMakePresets.json.
-DCMAKE_TOOLCHAIN_FILE=<path/to/vcpkg>/scripts/buildsystems/vcpkg.cmake Passez en tant que paramètre dans votre appel de configuration CMake.
Définissez la CMAKE_TOOLCHAIN_FILE variable CMake avant le premier appel à project() votre CMakeLists.txt fichier.
3 - Installer les dépendances
Si vous utilisez CMake ou MSBuild et que vous avez suivi l’étape précédente, vous pouvez passer à l’étape suivante : Générer le projet.
Si vous utilisez un autre système de génération ou que vous souhaitez installer les dépendances manuellement, vous devez tout exécuter vcpkg install dans le répertoire contenant votre fichier manifeste.
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)
Une fois la commande terminée, tous les packages générés sont présents dans un vcpkg_installed répertoire. L’emplacement spécifique de ce répertoire dépend de votre système de build ; généralement, dans le dossier de sortie par défaut du système de génération, ou en regard de votre vcpkg.json fichier.
Vous pouvez également activer le mode manifeste dans votre appel MSBuild en passant msbuild /p:VcpkgEnableManifest=true en tant que paramètre.
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.
Par défaut, le mode manifeste est désactivé dans les projets Visual Studio. Pour activer les manifestes, cliquez avec le bouton droit sur votre projet dans Explorateur de solutions, sélectionnez Propriétés, sélectionnez l’onglet vcpkg sur la gauche, puis définissez Use Vcpkg Manifestsur Oui.
l’option nommée « utiliser le manifeste VCPKG » est mise en surbrillance avec sa valeur définie sur « Oui ».
Générez le projet en cliquant dessus avec le bouton droit dans Explorateur de solutions et en sélectionnant Générer.
Build started...
1>------ Build started: Project: manifest-example, Configuration: Debug x64 ------
1>Installing vcpkg dependencies to D:\projects\manifest-example\vcpkg_installed\x64-windows\
1>"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\"
1>Detecting compiler hash for triplet x64-windows...
1>The following packages will be built and installed:
1> cxxopts:x64-windows -> 3.1.1
1> fmt:x64-windows -> 10.0.0
1> range-v3:x64-windows -> 0.12.0#1
1> * vcpkg-cmake:x64-windows -> 2023-05-04
1> * vcpkg-cmake-config:x64-windows -> 2022-02-06#1
1> (omitted)
1>main.cxx
1>manifest-example.vcxproj -> D:\projects\manifest-example\x64\Debug\manifest-example.exe
1>Done building project "manifest-example.vcxproj".
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
========== Build started at 12:07 PM and took 15.320 seconds ==========
1 - Créer un fichier CMakeLists.txt
Ajoutez le fichier suivant CMakeLists.txt dans le dossier du projet :
Exécutez la commande suivante : cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=%VCPKG_ROOT%\scripts\buildsystems\vcpkg.cmake, mais remplacez %VCPKG_ROOT% par votre chemin d’installation vcpkg.
Notez que les dépendances du projet sont automatiquement installées lors de la configuration du projet.
PS D:\projects\manifest-example> cmake -B build -S . -DCMAKE_TOOLCHAIN_FILE=D:\vcpkg\scripts\buildsystems\vcpkg.cmake
-- Running 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
<omitted output>
-- Running vcpkg install - done
-- Selecting Windows SDK version 10.0.18362.0 to target Windows 10.0.19041.
-- The CXX compiler identification is MSVC 19.27.29111.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: D:/projects/manifest-example/build
3 - Générer le projet CMake
Exécutez la commande suivante pour générer le projet : cmake --build build
PS D:\projects\manifest-example> cmake --build build
Microsoft (R) Build Engine version 16.7.0+b89cb5fde for .NET Framework
Copyright (C) Microsoft Corporation. All rights reserved.
Checking Build System
Building Custom Rule D:\projects\manifest-example\CMakeLists.txt
main.cxx
fibo.vcxproj -> D:\projects\manifest-example\build\Debug\fibo.exe
Building Custom Rule D:\projects\manifest-example\CMakeLists.txt
Étapes suivantes
Dans ce guide, vous avez installé des dépendances pour un projet simple à l’aide d’un fichier manifeste.
Voici quelques tâches supplémentaires à essayer ensuite :
Installer des packages pour des plateformes personnalisées, des compilateurs ou des architectures de build à l’aide de triplets
Réutiliser des fichiers binaires sur des exécutions d’intégration locale ou continue à l’aide de la mise en cache binaire
Gérer vos bibliothèques privées à l’aide de registres personnalisés
Collaborer avec nous sur GitHub
La source de ce contenu se trouve sur GitHub, où vous pouvez également créer et examiner les problèmes et les demandes de tirage. Pour plus d’informations, consultez notre guide du contributeur.
Commentaires sur vcpkg
vcpkg est un projet open source. Sélectionnez un lien pour fournir des commentaires :
Créez un projet .NET et apprenez à ajouter des packages et à gérer les dépendances de package de votre projet. Utilisez CLI .NET Core et le registre NuGet pour ajouter des bibliothèques et des outils à vos applications C# par le biais de Visual Studio Code.