Outils pour utilisateurs

Outils du site


prog:vcpkg

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
prog:vcpkg [2024/03/08 13:06] – Ajout de "Dépôt vcpkg local" rootprog:vcpkg [2024/08/28 14:09] (Version actuelle) – [Récupérer le code source] : fix typo root
Ligne 78: Ligne 78:
   * ''%%--x-install-root=%%'' pour l'emplacement du dossier d'installation.   * ''%%--x-install-root=%%'' pour l'emplacement du dossier d'installation.
  
-Il y a d'autres options pour des dossiers spécifiques mais ils ont moins nécessaires (''%%--x-asset-sources=%%'', ''%%--x-buildtrees-root=%%'', ''%%--downloads-root=%%'', ''%%--x-packages-root=%%'').+Il y a d'autres options pour des dossiers spécifiques mais ils sont plus rarement nécessaires (''%%--x-asset-sources=%%'', ''%%--x-buildtrees-root=%%'', ''%%--downloads-root=%%'', ''%%--x-packages-root=%%'', ''%%--x-builtin-ports-root=%%'', ''%%--x-builtin-registry-versions-dir=%%'', ''%%--overlay-triplets=%%'').
 ====Configuration globale==== ====Configuration globale====
  
Ligne 124: Ligne 124:
 La présente méthode va avoir plusieurs conséquences : La présente méthode va avoir plusieurs conséquences :
   * Il n'est possible d'avoir qu'un seul dépôt "intégré" (déclaré dans ''C:\Users\xxx\AppData\Local\vcpkg'').   * Il n'est possible d'avoir qu'un seul dépôt "intégré" (déclaré dans ''C:\Users\xxx\AppData\Local\vcpkg'').
-  * Si un projet dépend d'une librairie qui est déjà dans ''vcpkg'' mais avec une version différente, il va y avoir conflit et risque d'erreur de compilation.+  * Si un projet dépend d'une librairie qui est compilé en local alors qu'elle est également dans ''vcpkg'' mais avec une version différente, il va y avoir conflit et risque d'erreur de compilation.
 </WRAP> </WRAP>
  
Ligne 313: Ligne 313:
 ====portfile.cmake==== ====portfile.cmake====
  
-  * Récupérer le code source+===Récupérer le code source===
  
-SHA512 se calcule depuis l'URL https://github.com/[REPO]/archive/[REF].tar.gz. Mais pour faire simple, mettre 0 (pas vide) et laisser le téléchargement échouer. ''vcpkg'' affichera le bon ''SHA512''Si la valeur change à chaque fois, il y a probablement un problème de droit. Ouvrir le fichier téléchargé dans le dossier ''download'' avec un éditeur de texte pour vérifier le contenu (probablement une page HTML).+SHA512 se calcule depuis l'URL https://github.com/[REPO]/archive/[REF].tar.gz ou ''%%curl -H "PRIVATE-TOKEN: ${TOKEN}" -L git@[GITLAB_REPOSITORY]/[PROJECT]/-/archive/[VERSION]/[PROJECT]-[VERSION].tar.gz --output ${version}.tar.gz%%''. Mais pour faire simple, mettre 0 (pas vide) et laisser le téléchargement échouer. ''vcpkg'' affichera le bon ''SHA512''Il est aussi possible de mettre ''SKIP_SHA512'' (très mauvaise idée en production).
  
-''vcpkg_check_features'' active le define ''WITH_HDF5'' si la feature ''hdf5'' est activée.+Si la valeur change à chaque fois, il y a probablement un problème de droit. Ouvrir le fichier téléchargé dans le dossier ''download'' avec un éditeur de texte pour vérifier le contenu (probablement une page HTML).
  
-''vcpkg_cmake_configure''. ''BUILD_SHARED_LIBS'' est automatiquement transmis. Pour avoir la liste complète des variables automatiquement transmises, voir ''vcpkg\scripts\cmake\vcpkg_configure_cmake.cmake''+''vcpkg_from_github'' : par défaut, c'est systématiquement ''REF'' et son ''SHA512'' associé qui est utilisé.
- +
-''vcpkg_from_github'' : par défaut, c'est systématiquement ''REF'' et son ''SHA512'' associé qui est utilisé. Pour forcer l'utilisation de la branche ''HEAD_REF'', il faut ajouter ''set(VCPKG_USE_HEAD_VERSION ON)'' avant.+
  
 <code cmake> <code cmake>
Ligne 334: Ligne 332:
 </code> </code>
  
-  * Compiler+Il est possible de pointer vers une branche (port à usage de développement uniquement). 
 + 
 +On remplace ''REF'' par ''HEAD_REF'', on supprime ''SHA512'' et on définit ''VCPKG_USE_HEAD_VERSION'' pour forcer l'utilisation de ''HEAD_REF''
 + 
 +<code cmake> 
 +set(VCPKG_USE_HEAD_VERSION ON) 
 + 
 +vcpkg_from_gitlab( 
 +  OUT_SOURCE_PATH SOURCE_PATH 
 +  GITLAB_URL ${GITLAB_REPOSITORY} 
 +  REPO ${PROJECT} 
 +  HEAD_REF "master"
 +</code> 
 + 
 +===Compiler=== 
 + 
 +''vcpkg_check_features'' active le define ''WITH_HDF5'' si la feature ''hdf5'' est activée. 
 + 
 +''vcpkg_cmake_configure''. ''BUILD_SHARED_LIBS'' est automatiquement transmis. Pour avoir la liste complète des variables automatiquement transmises, voir ''vcpkg\scripts\cmake\vcpkg_configure_cmake.cmake''.
  
 <code cmake> <code cmake>
Ligne 346: Ligne 362:
 </code> </code>
  
-  * Installer+===Installer===
  
 <code cmake> <code cmake>
 vcpkg_cmake_install() vcpkg_cmake_install()
 +vcpkg_copy_pdbs()
 </code> </code>
  
-  * Patcher+===Patcher===
  
 Il faut ensuite tester l'installation et patcher pour rendre l'installation compatible avec vcpkg. Il faut ensuite tester l'installation et patcher pour rendre l'installation compatible avec vcpkg.
Ligne 373: Ligne 390:
 </code> </code>
  
-  * Subtilités+===Subtilités=== 
 + 
 +  * Accès aux variables d'environnement de Windows
  
 Sous Windows, les variables d'environnement ne sont pas passées à vcpkg et donc pas non plus à CMake. Sous Windows, les variables d'environnement ne sont pas passées à vcpkg et donc pas non plus à CMake.
Ligne 385: Ligne 404:
  
 La modification d'une variable dans ''VCPKG_ENV_PASSTHROUGH'' entrainera la recompilation des paquets. Contrairement à ''VCPKG_ENV_PASSTHROUGH_UNTRACKED''. [[https://learn.microsoft.com/en-us/vcpkg/users/triplets|Triplets reference]] La modification d'une variable dans ''VCPKG_ENV_PASSTHROUGH'' entrainera la recompilation des paquets. Contrairement à ''VCPKG_ENV_PASSTHROUGH_UNTRACKED''. [[https://learn.microsoft.com/en-us/vcpkg/users/triplets|Triplets reference]]
 +
 +  * Connaître l'architecture source / destination
 +
 +L'architecture source (hôte qui compile) : `CMAKE_HOST_<SYSTEM>`.
 +
 +L'architecture de destination (target qui exécutera) : `VCPKG_TARGET_IS_<SYSTEM>`. `WIN32` et `LINUX` sont dépréciés car il y a confusion facile entre l'hôte et la target.
  
 ====Publication des modifications==== ====Publication des modifications====
Ligne 405: Ligne 430:
 git add ports/package/* git add ports/package/*
 git commit -m "[package] new port" git commit -m "[package] new port"
-vcpkg format-manifest ports/package/vcpkg.json +./vcpkg format-manifest ports/package/vcpkg.json 
-./vcpkg.exe x-add-version --overwrite-version package+./vcpkg x-add-version package --overwrite-version
 git add versions git add versions
 git commit -a -m "[package] new port" git commit -a -m "[package] new port"
Ligne 414: Ligne 439:
 ====Dépôt vcpkg local==== ====Dépôt vcpkg local====
  
-  * Création du dépôt+  * Création d'un dépôt ''git''
  
 Plutôt que de devoir cloner tout le dépôt vcpkg de Microsoft, il est possible de faire son propre dépôt (registry) et d'y ajouter les packages. [[https://learn.microsoft.com/en-us/vcpkg/produce/publish-to-a-git-registry|Tutorial: Publish packages to a private vcpkg registry using Git]] {{ :prog:vcpkg:tutorial_publish_packages_to_a_private_vcpkg_registry_using_git_microsoft_learn_3_8_2024_12_59_10_pm_.html |Archive du 10/01/2024 le 08/03/2024}} Plutôt que de devoir cloner tout le dépôt vcpkg de Microsoft, il est possible de faire son propre dépôt (registry) et d'y ajouter les packages. [[https://learn.microsoft.com/en-us/vcpkg/produce/publish-to-a-git-registry|Tutorial: Publish packages to a private vcpkg registry using Git]] {{ :prog:vcpkg:tutorial_publish_packages_to_a_private_vcpkg_registry_using_git_microsoft_learn_3_8_2024_12_59_10_pm_.html |Archive du 10/01/2024 le 08/03/2024}}
Ligne 436: Ligne 461:
 git commit -m "Initial commit" git commit -m "Initial commit"
 </code> </code>
 +
 +  * Création d'un dépôt ''filesystem''
 +
 +Voir exemple [[https://github.com/vcpkg/example-filesystem-registry/|example-filesystem-registry]] {{ :prog:vcpkg:example-filesystem-registry-2021-05-06.zip |Archive du 06/05/2021 le 08/03/2024}}
 +
 +Les différentes sont dans les fichiers ''versions/*-/XXXX.json'', à la place des champs ''git-tree'', il faut remplir le champ ''path'' :
 +
 +<file javascript port.json>
 +{
 +  "versions": [
 +    {
 +      "version": "1.0.0",
 +      "path": "$/ports/XXXX/1.0.0"
 +    }
 +  ]
 +}
 +</file>
 +
 +L'arborescence du dossier ''ports'' est donc légèrement différente et il n'y a pas besoin d'appeler ''%%vcpkg x-add-version ...%%''.
  
   * Ajout des paquets au dépôt   * Ajout des paquets au dépôt
Ligne 441: Ligne 485:
 Ajouter ensuite les paquets selon la méthode du paragraphe précédent. Ajouter ensuite les paquets selon la méthode du paragraphe précédent.
  
-Si le registry n'a pas de binaire ''vcpkg.exe'', il est possible d'utilise celui du dépôt de Microsoft et de spécifier l'emplacement du dossier du registry :+Si le registry n'a pas de binaire ''vcpkg.exe'', il est possible d'utiliser celui du dépôt de Microsoft et de spécifier l'emplacement du dossier du registry :
  
 <code bash> <code bash>
Ligne 449: Ligne 493:
   * Utilisation de plusieurs dépôts en même temps   * Utilisation de plusieurs dépôts en même temps
  
-Il faut créer le fichier ''vcpkg-configuration.json'' à côté du fichier ''vcpkg.json''.+Il n'est pas possible de spécifier en ligne de commande un registry secondaire sans passer par un fichier ''vcpkg-configuration.json''. Cela n'impose pas la présence d'un fichier ''vcpkg.json'' et il reste donc possible d'utiliser ''vcpkg'' en mode classique ou manifest. 
 + 
 +Si le fichier ''vcpkg.json'' existe, il faut créer le fichier ''vcpkg-configuration.json'' à côté de ce fichier
 + 
 +Si ''vcpkg.json'' n'existe pas, il faut créer le fichier ''vcpkg-configuration.json'' dans le même dossier que ''VCPKG_ROOT'' (le registry principal).
  
 <file javascript vcpkg-configuration.json> <file javascript vcpkg-configuration.json>
Ligne 477: Ligne 525:
  
 Le dossier temporaire de clone des dépôts git sont dans ''C:\Users\[USER]\AppData\Local\vcpkg\registries''. Le dossier temporaire de clone des dépôts git sont dans ''C:\Users\[USER]\AppData\Local\vcpkg\registries''.
 +
 +=====Ajout / modification d'un triplet=====
 +
 +Voir la documentation [[https://learn.microsoft.com/fr-fr/vcpkg/users/triplets|triplet]] de vcpkg.
 +
 +====Variables les plus courantes====
 +
 +===Toutes plateformes===
 +
 +  * ''VCPKG_TARGET_ARCHITECTURE'' : architecture des librairies à générer (''x64'', ...),
 +  * ''VCPKG_LIBRARY_LINKAGE'' : compilation en ''dynamic'' ou ''static'' des librairies générer,
 +  * ''VCPKG_CRT_LINKAGE'' : compilation en ''dynamic'' ou ''static'' avec la librairie standard de Visual Studio. Par expérience, j'ai souvent moins de problème à mettre ''dynamic'' quand configurer un projet avec les binaires de vcpkg.
 +  * ''VCPKG_BUILD_TYPE'' : laisser vide pour compiler en ''Debug'' et ''Release''. Mettre ''release'' (sans la majuscule) pour compiler uniquement en Release. Uniquement ''debug'' n'est pas supporté.
 +  * Flags de compilation : ''VCPKG_CXX_FLAGS'', ''VCPKG_CXX_FLAGS_DEBUG'', ''VCPKG_CXX_FLAGS_RELEASE'', ''VCPKG_C_FLAGS'', ''VCPKG_C_FLAGS_DEBUG'', ''VCPKG_C_FLAGS_RELEASE'', ''VCPKG_LINKER_FLAGS'', ''VCPKG_LINKER_FLAGS_DEBUG'', ''VCPKG_LINKER_FLAGS_RELEASE''.
 +
 +===Windows uniquement===
 +
 +  * ''VCPKG_ENV_PASSTHROUGH'' et ''VCPKG_ENV_PASSTHROUGH_UNTRACKED'' : toutes les variables d'environnement de Windows sont ignorés. Il faut ajouter le nom des variables dans ces variables CMake pour que vcpkg les prennent en compte. Les variables dans ''VCPKG_ENV_PASSTHROUGH'' sont pris en compte dans le calcul du hash pour savoir s'il faut recompiler. Les variables dans ''VCPKG_ENV_PASSTHROUGH_UNTRACKED'' ne sont pas prises en compte (mot de passe par exemple).
 +  * ''VCPKG_PLATFORM_TOOLSET'' : version de Visual Studio à reprendre (''v140'', ''v141'', ''v142'', ''v143'', ''ClangCL''). Equivalent à l'option ''-T'' de CMake.
 +
 +====Personnalisation avancée====
 +
 +Il est possible d'appliquer des options de compilation spécifiques pour certains paquets :
 +
 +<code cmake>
 +set(VCPKG_LIBRARY_LINKAGE static)
 +if(${PORT} MATCHES "qt5-")
 +    set(VCPKG_LIBRARY_LINKAGE dynamic)
 +endif()
 +</code>
prog/vcpkg.1709899594.txt.gz · Dernière modification : 2024/03/08 13:06 de root