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/12 09:46] – [Dépôt vcpkg local] : précision sur la nécessité d'avoir le fichier vcpkg-configuration.json rootprog:vcpkg [2025/01/28 14:05] (Version actuelle) – [CMake] : ajout de "Passer des paramètres à l'appel de vcpkg" root
Ligne 117: Ligne 117:
 {{ :prog:vcpkg:vcpkg_creates_multiple_triplets_for_packages_with_no_reason._issue_33040_microsoft_vcpkg_github_24_11_2023_10_20_02_.html |Archive du 08/08/2023 le 24/11/2023}} {{ :prog:vcpkg:vcpkg_creates_multiple_triplets_for_packages_with_no_reason._issue_33040_microsoft_vcpkg_github_24_11_2023_10_20_02_.html |Archive du 08/08/2023 le 24/11/2023}}
  
 +  * Passer des paramètres à l'appel de vcpkg
 +
 +Si on veut faire passer des options à l'appel de vcpkg, il faut utiliser ''VCPKG_INSTALL_OPTIONS''. Par exemple ''%%-DVCPKG_INSTALL_OPTIONS=--debug%%''.
 ====Visual Studio==== ====Visual Studio====
  
Ligne 124: Ligne 127:
 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 316:
 ====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 335:
 </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 365:
 </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 393:
 </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 407:
  
 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 433:
 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 500: Ligne 528:
  
 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.
 +
 +<WRAP center round important 60%>
 +Passer les variables via CMake (''-DVCPKG_CXX_FLAGS=/fsanitize=address'' par exemple) ne fonctionne pas. Il faut bien le mettre dans le fichier triplet.
 +</WRAP>
 +
 +====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 ne pas définir 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''. Attention, ces variables seront respectées si ''VCPKG_CHAINLOAD_TOOLCHAIN_FILE'' pointe vers ceux à l'intérieur de ''vcpkg''. Ce qui n'est pas le cas pour le triplet ''wasm-emscripten''. Dans ce cas, on peut utiliser : ''%%set(VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG -DCMAKE_CXX_FLAGS=\"-O1 -g\" -DCMAKE_C_FLAGS=\"-O1 -g\" --trace-expand)%%''
 +
 +  * Flags de configuration de CMake : ''VCPKG_CMAKE_CONFIGURE_OPTIONS'', ''VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG'' et ''VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE''. C'est via cette variable que l'on peut passer par exemple ''%%--trace-expand%%'' à la configuration des ports.
 +===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.1710233211.txt.gz · Dernière modification : 2024/03/12 09:46 de root