Compartilhar via


Empacotando arquivos compactados Exemplo: zlib

Bootstrap com create

Primeiro, localize um arquivo acessível globalmente das fontes da biblioteca. Zip, gzip e bzip são suportados. Prefira fortemente fontes oficiais ou espelhos em vez de espelhos não oficiais.

Olhando para o site da zlib, a URL http://zlib.net/zlib-1.2.13.tar.gz parece apropriada.

Em segundo lugar, determine um nome de pacote adequado. Isso deve ser ASCII, minúsculo e reconhecível para alguém que conheça o "nome humano" da biblioteca. Se a biblioteca já estiver empacotada em outro gerenciador de pacotes, prefira esse nome.

Como o zlib já está empacotado como zlib, usaremos o nome zlib2 para este exemplo.

Finalmente, se o nome do servidor para o arquivo não for muito descritivo (como baixar uma confirmação compactada ou ramificação do GitHub), escolha um bom nome de arquivo do formulário <packagename>-<version>.zip.

zlib-1.2.13.zip é um bom nome, por isso nenhuma mudança necessária.

Todas essas informações podem então ser passadas para o comando, que fará o download dos códigos-fonte e inicializará o create processo de empacotamento dentro ports/<packagename>do .

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

Crie o arquivo de manifesto

Além do gerado ports/<package>/portfile.cmake, também precisamos de um ports/<package>/vcpkg.json arquivo. Esse arquivo é um conjunto simples de campos que descrevem os metadados do pacote.

Para zlib2, criaremos o arquivo ports/zlib2/vcpkg.json com o seguinte conteúdo:

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

Ajustar o arquivo de porta gerado

O gerado portfile.cmake precisará de alguma edição para empacotar corretamente a maioria das bibliotecas na natureza, no entanto, podemos começar experimentando a compilação.

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

Neste ponto, é uma questão de ler as mensagens de erro e arquivos de log enquanto melhora constantemente a qualidade do portfile. Zlib exigiu fornecer uma cópia discreta da LICENÇA para copiar para o pacote, suprimindo a compilação e instalação de executáveis e cabeçalhos, e removendo as bibliotecas estáticas depois que eles foram instalados.

Exemplo sugerido de portfiles

ports/ No diretório há muitas bibliotecas que podem ser usadas como exemplos, incluindo muitas que não são baseadas no CMake.

  • Bibliotecas somente de cabeçalho
    • rapidjson
    • intervalo-v3
  • Baseado em MSBuild
    • Chakracore
  • Não-CMake, sistema de compilação personalizado
    • openssl
    • ffmpeg