Freigeben über


Beispiel zum Packen von Archivdateien: zlib

Bootstrap mit create

Suchen Sie zunächst ein global zugängliches Archiv der Quellen der Bibliothek. Zip, gzip und bzip werden alle unterstützt. Bevorzugen Sie offizielle Quellen oder Spiegel gegenüber inoffiziellen Spiegel.

Wenn Sie sich die Website von zlib ansehen, sieht die URL http://zlib.net/zlib-1.2.13.tar.gz entsprechend aus.

Ermitteln Sie zweitens einen geeigneten Paketnamen. Dies sollte ASCII, Kleinbuchstabe und erkennbar für jemanden sein, der den "menschlichen Namen" der Bibliothek kennt. Wenn die Bibliothek bereits in einem anderen Paket-Manager verpackt ist, bevorzugen Sie diesen Namen.

Da zlib bereits als zlib verpackt ist, verwenden wir den Namen zlib2 für dieses Beispiel.

Wenn der Name des Servers für das Archiv nicht sehr beschreibend ist (z. B. herunterladen eines gezippten Commits oder einer Verzweigung von GitHub), wählen Sie einen schönen Archivnamen des Formulars <packagename>-<version>.zipaus.

zlib-1.2.13.zip ist ein guter Name, sodass keine Änderung erforderlich ist.

Alle diese Informationen können dann an den create Befehl übergeben werden, der die Quellen herunter lädt und den Verpackungsprozess innerhalb ports/<packagename>des Paketprozesses bootstrapiert.

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

Paketlistendatei erstellen

Zusätzlich zur generierten ports/<package>/portfile.cmakeDatei benötigen wir auch eine ports/<package>/vcpkg.json Datei. Diese Datei ist eine einfache Gruppe von Feldern, die die Metadaten des Pakets beschreiben.

Für zlib2 erstellen wir die Datei ports/zlib2/vcpkg.json mit dem folgenden Inhalt:

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

Optimieren der generierten Portdatei

Die generierte portfile.cmake Datei benötigt einige Bearbeitungen, um die meisten Bibliotheken in der Wildbahn korrekt zu verpacken, wir können jedoch mit dem Testen des Builds beginnen.

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

An diesem Punkt ist es wichtig, die Fehlermeldungen und Protokolldateien zu lesen und gleichzeitig die Qualität der Portdatei stetig zu verbessern. Zlib musste eine diskrete Kopie der LIZENZ bereitstellen, um in das Paket zu kopieren, den Build und die Installation von ausführbaren Dateien und Headern zu unterdrücken und die statischen Bibliotheken nach der Installation zu entfernen.

Vorgeschlagene Beispielportdateien

ports/ Im Verzeichnis gibt es viele Bibliotheken, die als Beispiele verwendet werden können, einschließlich vieler Bibliotheken, die nicht auf CMake basieren.

  • Nur Headerbibliotheken
    • Rapidjson
    • range-v3
  • MSBuild-basiert
    • chacore
  • Non-CMake, benutzerdefiniertes Buildsystem
    • openssl
    • FFMPEG