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


Порты наложения

Обычно порты vcpkg получаются из реестров. Скорее всего, большинство установленных портов приходят из официального реестра vcpkg по адресу https://github.com/Microsoft/vcpkg. vcpkg позволяет устанавливать порты, доступные для вас через файловую систему, мы вызываем эти порты, наложения портов.

Порт наложения может выступать в качестве замены существующего порта или нового порта, который в противном случае недоступен в реестре. При разрешении имен пакетов порты наложения принимают приоритет.

Порты наложения оцениваются в следующем порядке:

  • Каталог, указанный в командной строке с помощью --overlay-portsподкаталогов или именованных подкаталогов, если этот каталог отсутствует CONTROL или vcpkg.json файл.
  • Каталог, указанный vcpkg-configuration.json в файле с помощью overlay-portsподкаталогов или именованных подкаталогов, если этот каталог отсутствует CONTROL или vcpkg.json файл.
  • Каталог, указанный VCPKG_OVERLAY_PORTS в записях переменной среды или именованных подкаталогах, если этот каталог отсутствует CONTROL или vcpkg.json файл.

При разрешении имен портов выбрано первое расположение, содержащее соответствующий порт наложения.

Использование порта наложения

Если указан порт наложения, сначала vcpkg пытается загрузить этот каталог в качестве порта. В случае успешного выполнения сам каталог рассматривается как порт, а имя наложения является производным от CONTROL файла или vcpkg.json файла. В противном случае рассматриваются подкаталоги с именем порта наложения.

Допустимые порты содержат portfile.cmakeи vcpkg.json CONTROLлибо.

Например, рассмотрим следующую структуру каталогов:

  • x/vcpkg.json"name", для поля задано "a"значение .
  • x/portfile.cmake, связанные инструкции по сборке для a.
  • x/b/vcpkg.json"name", для поля задано "b"значение .
  • x/b/portfile.cmake, связанные инструкции по сборке для b.
  • y/c/vcpkg.json"name", для поля задано "c"значение .
  • y/c/portfile.cmake, связанные инструкции по сборке для c.
  • y/d/vcpkg.json"name", для поля задано "d"значение .
  • y/d/portfile.cmake, связанные инструкции по сборке для d.

vcpkg рассмотрит следующие порты с учетом следующих параметров:

  • --overlay-ports=x: в этом наложении aесть один порт. Имя является производным от vcpkg.json. Подкаталог b не считается.
  • --overlay-ports=x/b: в этом наложении bесть один порт. Имя является производным от vcpkg.json.
  • --overlay-ports=y: в этом наложении есть два порта и c d. Их имена являются производными от подкаталогов y, и имена, объявленные в их vcpkg.json совпадении, или ошибка будет создана, если vcpkg будет предложено рассмотреть c или d.

Конфигурацию порта наложения можно добавить несколькими способами:

  • Командная строка: добавьте один или несколько --overlay-ports=<directory> параметров в командную строку.
  • Манифест. Заполнение массива "overlay-ports" в vcpkg-configuration.json.
  • Переменная среды: задайте VCPKG_OVERLAY_PORTS для списка символов с разделителями пути.

Пример наложения портов

Учитывая эту структуру каталогов:

Пример с несколькими каталогами портов наложения

Каталог наложения с именем team-ports содержит порты sqlite3, rapidjson и curl. Каталог наложения с именем my-ports содержит порты sqlite3 и rapidjson. Каталог vcpkg содержит реестр по умолчанию.

Запустить:

vcpkg install sqlite3 --overlay-ports=my-ports --overlay-ports=team-ports

Для установки:

  • sqlite3 из my-ports

Запустить:

vcpkg install sqlite3 rapidjson curl
    --overlay-ports=my-ports/rapidjson
    --overlay-ports=vcpkg/ports/curl
    --overlay-ports=team-ports

Для установки:

  • sqlite3 из team-ports
  • rapidjson из my-ports
  • curl из vcpkg/ports

Пример. Использование портов наложения для использования зависимости диспетчера системных пакетов

Чтобы использовать зависимость диспетчера системных пакетов от vcpkg one, обратитесь к нашей записи блога.