Порты наложения
Обычно порты 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, обратитесь к нашей записи блога.