Поделиться через


Пример упаковки архивных файлов: zlib

Начальная загрузка с create

Сначала найдите глобально доступный архив источников библиотеки. Поддерживаются zip, gzip и bzip. Настоятельно предпочитать официальные источники или зеркало по сравнению с неофициальными зеркало.

Глядя на веб-сайт zlib, URL-адрес http://zlib.net/zlib-1.2.13.tar.gz выглядит соответствующим образом.

Во-вторых, определите подходящее имя пакета. Это должно быть ASCII, строчные буквы и узнаваемый кому-то, кто знает "человеческое имя библиотеки". Если библиотека уже упакована в другой диспетчер пакетов, предпочитайте это имя.

Так как zlib уже упаковано как zlib, мы будем использовать имя zlib2 для этого примера.

Наконец, если имя сервера для архива не очень описательно (например, скачивание zippped фиксации или ветви из GitHub), выберите хорошее имя архива формы <packagename>-<version>.zip.

zlib-1.2.13.zip является прекрасным именем, поэтому изменения не требуются.

Затем все эти сведения можно передать в create команду, которая скачайте источники и загрузит процесс упаковки внутри 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

Создание файла манифеста

Помимо созданного ports/<package>/portfile.cmakeфайла, нам также нужен ports/<package>/vcpkg.json файл. Этот файл представляет собой простой набор полей, описывающих метаданные пакета.

Для zlib2 мы создадим файл ports/zlib2/vcpkg.json со следующим содержимым:

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

Настройка созданного порта

portfile.cmake Для правильного упаковки большинства библиотек в диком режиме потребуется некоторое редактирование, однако мы можем начать, пробовав сборку.

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

На этом этапе речь идет о чтении сообщений об ошибках и файлах журналов, постоянно повышая качество портфайла. Zlib требует предоставления дискретной копии ЛИЦЕНЗИИ для копирования в пакет, подавления сборки и установки исполняемых файлов и заголовков, а также удаления статических библиотек после их установки.

Рекомендуемые примеры портов

В каталоге ports/ есть множество библиотек, которые можно использовать в качестве примеров, включая многие, которые не основаны на CMake.

  • Только библиотеки заголовков
    • rapidjson
    • range-v3
  • На основе MSBuild
    • chakracore
  • Non-CMake, настраиваемая система сборки
    • openssl
    • ffmpeg