Condividi tramite


Esempio di pacchetti di file di archivio: zlib

Bootstrap con create

In primo luogo, individuare un archivio accessibile a livello globale delle origini della libreria. Sono supportati tutti zip, gzip e bzip. Preferire fortemente fonti ufficiali o specchi rispetto a specchi non ufficiali.

Esaminando il sito Web di zlib, l'URL http://zlib.net/zlib-1.2.13.tar.gz è appropriato.

In secondo luogo, determinare un nome di pacchetto appropriato. Deve essere ASCII, minuscolo e riconoscibile per qualcuno che conosce il "nome umano" della libreria. Se la libreria è già in pacchetto in un'altra gestione pacchetti, preferisce tale nome.

Poiché zlib è già incluso in un pacchetto come zlib, verrà usato il nome zlib2 per questo esempio.

Infine, se il nome del server per l'archivio non è molto descrittivo (ad esempio scaricare un commit compresso o un ramo da GitHub), scegliere un bel nome di archivio del modulo <packagename>-<version>.zip.

zlib-1.2.13.zip è un nome corretto, quindi non sono necessarie modifiche.

Tutte queste informazioni possono quindi essere passate al create comando , che scaricherà le origini e bootstrap il processo di creazione del pacchetto all'interno ports/<packagename>di .

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

Creare il file manifest

Oltre all'oggetto generato ports/<package>/portfile.cmake, è necessario anche un ports/<package>/vcpkg.json file. Questo file è un semplice set di campi che descrivono i metadati del pacchetto.

Per zlib2 verrà creato il file ports/zlib2/vcpkg.json con il contenuto seguente:

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

Modificare il file di porta generato

L'oggetto generato portfile.cmake richiederà alcune modifiche per creare correttamente il pacchetto della maggior parte delle librerie in modo selvaggio, tuttavia è possibile iniziare provando la compilazione.

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

A questo punto, è importante leggere i messaggi di errore e i file di log, migliorando costantemente la qualità del file di porta. Zlib richiedeva di fornire una copia discreta di LICEN edizione Standard per copiare nel pacchetto, eliminare la compilazione e l'installazione di file eseguibili e intestazioni e rimuovere le librerie statiche dopo l'installazione.

Portfile di esempio suggeriti

ports/ Nella directory sono disponibili molte librerie che possono essere usate come esempi, tra cui molte non basate su CMake.

  • Librerie solo intestazioni
    • rapidjson
    • range-v3
  • Basato su MSBuild
    • il sistema di core
  • Non CMake, sistema di compilazione personalizzato
    • openssl
    • ffmpeg