Partager via


Exemple de fichiers d’archive d’empaquetage : zlib

Bootstrap avec create

Tout d’abord, recherchez une archive globalement accessible des sources de la bibliothèque. Zip, gzip et bzip sont tous pris en charge. Préférez fortement les sources officielles ou les miroir par rapport aux miroir non officiels.

En examinant le site web de zlib, l’URL http://zlib.net/zlib-1.2.13.tar.gz semble appropriée.

Ensuite, déterminez un nom de package approprié. Il doit s’agir d’ASCII, de minuscules et reconnaissables à une personne qui connaît le « nom humain » de la bibliothèque. Si la bibliothèque est déjà empaquetée dans un autre gestionnaire de package, préférez ce nom.

Étant donné que zlib est déjà empaqueté en tant que zlib, nous allons utiliser le nom zlib2 pour cet exemple.

Enfin, si le nom du serveur pour l’archive n’est pas très descriptif (par exemple, le téléchargement d’une validation zippée ou d’une branche à partir de GitHub), choisissez un nom d’archive agréable du formulaire <packagename>-<version>.zip.

zlib-1.2.13.zip est un nom correct, donc aucune modification n’est nécessaire.

Toutes ces informations peuvent ensuite être transmises à la create commande, qui télécharge les sources et démarre le processus d’empaquetage à l’intérieur ports/<packagename>.

PS D:\src\vcpkg> .\vcpkg create zlib2 http://zlib.net/zlib-1.2.13.tar.gz zlib-1.2.13.tar.gz
-- Downloading http://zlib.net/zlib-1.2.13.tar.gz -> zlib-1.2.13.tar.gz...
-- Generated portfile: D:\src\vcpkg\ports\zlib2\portfile.cmake
-- Generated manifest: D:\src\vcpkg\ports\zlib2\vcpkg.json
-- To launch an editor for these new files, run
--     .\vcpkg edit zlib2

Créer un fichier manifest

Outre le fichier généré ports/<package>/portfile.cmake, nous avons également besoin d’un ports/<package>/vcpkg.json fichier. Ce fichier est un ensemble simple de champs décrivant les métadonnées du package.

Pour zlib2, nous allons créer le fichier ports/zlib2/vcpkg.json avec le contenu suivant :

{
  "name": "zlib2",
  "version": "1.2.13",
  "description": "A Massively Spiffy Yet Delicately Unobtrusive Compression Library"
}

Ajuster le fichier de port généré

La génération portfile.cmake a besoin d’une modification pour empaqueter correctement la plupart des bibliothèques dans la nature, mais nous pouvons commencer par essayer la build.

PS D:\src\vcpkg> .\vcpkg install zlib2
Computing installation plan...
The following packages will be built and installed:
    zlib2[core]:x64-uwp
Starting package 1/1: zlib2:x64-uwp
Building package zlib2[core]:x64-uwp...
-- Using cached C:/src/vcpkg/downloads/zlib-1.2.13.tar.gz
-- Cleaning sources at C:/src/vcpkg/buildtrees/zlib2/src/1.2.13-deec42f53b.clean. Pass --editable to vcpkg to reuse sources.
-- Extracting source C:/src/vcpkg/downloads/zlib-1.2.13.tar.gz
-- Applying patch cmake_dont_build_more_than_needed.patch
-- Using source at C:/src/vcpkg/buildtrees/zlib2/src/1.2.13-deec42f53b.clean
-- Configuring x64-uwp
-- Building x64-uwp-dbg
-- Building x64-uwp-rel
-- Installing: C:/src/vcpkg/packages/zlib2_x64-uwp/share/zlib2/copyright
-- Performing post-build validation
Include files should not be duplicated into the /debug/include directory. If this cannot be disabled in the project cmake, use
    file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
/debug/share should not exist. Please reorganize any important files, then use
    file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share)
The software license must be available at ${CURRENT_PACKAGES_DIR}/share/zlib2/copyright
Found 3 error(s). Please correct the portfile:
    D:\src\vcpkg\ports\zlib2\portfile.cmake

À ce stade, il s’agit de lire les messages d’erreur et les fichiers journaux tout en améliorant constamment la qualité du fichier portfile. Zlib a requis la fourniture d’une copie discrète de la licence à copier dans le package, en supprimant la génération et l’installation d’exécutables et d’en-têtes, et en supprimant les bibliothèques statiques après leur installation.

Exemples suggérés de fichiers portfiles

Dans le ports/ répertoire sont de nombreuses bibliothèques qui peuvent être utilisées comme exemples, y compris beaucoup qui ne sont pas basées sur CMake.

  • Bibliothèques d’en-tête uniquement
    • rapidjson
    • range-v3
  • BASÉ sur MSBuild
    • chakracore
  • Non-CMake, buildsystem personnalisé
    • openssl
    • FFmpeg