Прочитать на английском

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


Триплетные переменные

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

Ознакомьтесь с документацией по концепциям триплетов для высокоуровневого представления возможностей триплета.

Переменные

VCPKG_TARGET_ARCHITECTURE

Указывает архитектуру целевого компьютера.

Допустимые параметры: x86, armarm64ecs390xriscv32ppc64leriscv64loongarch32arm64x64, , loongarch64mips64и .wasm32

VCPKG_CRT_LINKAGE

Указывает нужную компоновку CRT (для MSVC).

Допустимые параметры: dynamic и static.

VCPKG_LIBRARY_LINKAGE

Указывает предпочитаемую компоновку библиотеки.

Допустимые параметры: dynamic и static. Библиотеки могут игнорировать этот параметр, если они не поддерживают предпочтительный тип компоновки.

VCPKG_BUILD_TYPE

Это значение можно задать для release сборки версий портов только для выпуска. По умолчанию это значение пусто. Если это значение пустое vcpkg, сборка и отладка конфигураций портов.

VCPKG_CMAKE_SYSTEM_NAME

Указывает целевую платформу.

Допустимые параметры включают любое имя системы CMake, например:

  • Пустой (классический компьютер Windows по устаревшим причинам)
  • WindowsStore(универсальная платформа Windows)
  • MinGW (Минималистский GNU для Windows)
  • Darwin (Mac OSX)
  • iOS (iOS)
  • Linux (Linux)
  • Emscripten (WebAssembly)

VCPKG_CMAKE_SYSTEM_VERSION

Указывает версию системы целевой платформы.

Это поле является необязательным, и при наличии будет передано в сборку как CMAKE_SYSTEM_VERSION.

См. также документацию по CMake для CMAKE_SYSTEM_VERSION

VCPKG_CHAINLOAD_TOOLCHAIN_FILE

Указывает альтернативный файл цепочки инструментов CMake для использования.

Это (если задано) переопределит всю другую логику обнаружения компилятора. По умолчанию файл цепочки инструментов выбирается из scripts/toolchains/ соответствующей платформы.

Примечание

Чтобы создать пользовательский файл цепочки инструментов, лучше всего начать с включения существующей цепочки ${VCPKG_ROOT}/scripts/toolchains инструментов и расширения его. Это гарантирует, что необходимые переменные, заданные исполняемым файлом vcpkg, например VCPKG_TARGET_ARCHITECTURE, VCPKG_CXX_FLAGSVCPKG_LINKER_FLAGSи другими переменными, перенаправляются в CMake.

См. также документацию по CMake для файлов цепочки инструментов.

VCPKG_CXX_FLAGS

Задает дополнительные флаги компилятора, которые будут использоваться при использовании VCPKG_CHAINLOAD_TOOLCHAIN_FILE.

Этот параметр также имеет формы для флагов, относящихся к конфигурации, и флагов языка C:

  • VCPKG_CXX_FLAGS
  • VCPKG_CXX_FLAGS_DEBUG
  • VCPKG_CXX_FLAGS_RELEASE
  • VCPKG_C_FLAGS
  • VCPKG_C_FLAGS_DEBUG
  • VCPKG_C_FLAGS_RELEASE

Если задано VCPKG_CXX_FLAGS, необходимо также задать VCPKG_C_FLAGSи наоборот. То же самое относится к флагам, зависящим от конфигурации. Эти переменные принимают строку флагов компилятора с разделителями пробелами:

set(VCPKG_CXX_FLAGS "/wd4996 -D_CRT_SECURE_NO_WARNINGS")
set(VCPKG_C_FLAGS "/wd4996 -D_CRT_SECURE_NO_WARNINGS")

VCPKG_LINKER_FLAGS

Задает дополнительные флаги компоновщика, которые будут использоваться при создании динамических библиотек и исполняемых файлов в отсутствие VCPKG_CHAINLOAD_TOOLCHAIN_FILE.

Этот параметр также имеет формы для флагов, относящихся к конфигурации:

  • VCPKG_LINKER_FLAGS
  • VCPKG_LINKER_FLAGS_DEBUG
  • VCPKG_LINKER_FLAGS_RELEASE

VCPKG_MESON_CONFIGURE_OPTIONS

Задайте дополнительные параметры настройки Meson, добавленные к команде настройки (в vcpkg_configure_meson).

Это поле необязательно.

Также доступно в качестве конкретного VCPKG_MESON_CONFIGURE_OPTIONS_DEBUG типа сборки и VCPKG_MESON_CONFIGURE_OPTIONS_RELEASE переменных.

VCPKG_MESON_NATIVE_FILE_RELEASE

Укажите дополнительный зависимый от конфигурации файл в виде мезонного кросс-собственного файла. Можно использовать для переопределения параметров, предоставляемых vcpkg, так как он будет передаваться после того, как созданные vcpkg кросс-собственные файлы передаются.

Особенно полезно предоставить собственные build_machine и host_machine записи.

VCPKG_MESON_NATIVE_FILE_DEBUG

См . VCPKG_MESON_NATIVE_FILE_RELEASE.

VCPKG_MESON_CROSS_FILE_RELEASE

См . VCPKG_MESON_NATIVE_FILE_RELEASE.

VCPKG_MESON_CROSS_FILE_DEBUG

См . VCPKG_MESON_NATIVE_FILE_RELEASE.

VCPKG_CMAKE_CONFIGURE_OPTIONS

Задает дополнительные параметры настройки CMake, которые добавляются в команду настройки (в vcpkg_cmake_configure).

Это поле необязательно.

Также доступно в качестве конкретного VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG типа сборки и VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE переменных.

VCPKG_CONFIGURE_MAKE_OPTIONS

Задайте дополнительные параметры настройки automake/autoconf, которые добавляются в команду настройки (в vcpkg_configure_make).

Это поле необязательно.

Например, чтобы пропустить определенные проверки libtool, которые могут привести к ошибке:

set(VCPKG_CONFIGURE_MAKE_OPTIONS "lt_cv_deplibs_check_method=pass_all")

Также доступно в качестве конкретного VCPKG_CONFIGURE_MAKE_OPTIONS_DEBUG типа сборки и VCPKG_CONFIGURE_MAKE_OPTIONS_RELEASE переменных.

VCPKG_HASH_ADDITIONAL_FILES

Список файлов, которые необходимо включить в вычисление хэшей пакета ABI.

Это поле необязательно.

Объявите все файлы, влияющие на содержимое пакета и должны быть учтены в вычислении хэша ABI. Например:

  • Файлы, включенные (через include(filepath)) в настраиваемые триплеты и цепочки инструментов.
  • Файлы, определенные в VCPKG_MESON_(NATIVE|CROSS)_FILE_<CONFIG>

Рассматриваются только содержимое и порядок файлов, пути файлов не влияют на хэш ABI.

set(VCPKG_HASH_ADDITIONAL_FILES
  "${CMAKE_CURRENT_LIST_DIR}/file1.cmake"
  "${CMAKE_CURRENT_LIST_DIR}/meson-cross.txt"
)

VCPKG_POST_PORTFILE_INCLUDES

Список файлов CMake, которые необходимо включить после выполнения portfile.cmake.

Это поле необязательно.

Содержимое и порядок файлов используются для хэша ABI, пути файлов не влияют на хэш ABI.

set(VCPKG_POST_PORTFILE_INCLUDES
  "${CMAKE_CURRENT_LIST_DIR}/file1.cmake"
  "${CMAKE_CURRENT_LIST_DIR}/file2.cmake"
)

VCPKG_DEP_INFO_OVERRIDE_VARS

Примечание

В этом разделе рассматривается экспериментальная функция vcpkg, которая может изменяться или удаляться в любое время.

Заменяет вычисленный по умолчанию список терминов "Поддерживает" по умолчанию.

Этот параметр (если задан) переопределит набор терминов по умолчанию, используемых для оценки выражения платформы.

Дополнительные сведения см. в документации по полю файла манифеста "supports" .

Примечание

Этот список извлекается с помощью вспомогательной vcpkg_get_dep_info функции.

VCPKG_DISABLE_COMPILER_TRACKING

Предупреждение

Включение этого параметра не рекомендуется, так как оно может привести к несовместимости ABI в восстановленных двоичных пакетах. Дополнительные сведения см. в документации по кэшированию двоичных файлов

Если этот параметр имеет значение TRUE, ONили 1компилятор не будет отслеживаться как часть abis пакета.

Это приведет к повторному использованию двоичных кэширований из более старых или более новых компиляторов.

Переменные, относящиеся к Windows

VCPKG_ENV_PASSTHROUGH

Указывает vcpkg разрешить дополнительные переменные среды в процессе сборки.

В Windows vcpkg создает пакеты в специальной чистой среде, изолированной от текущей командной строки, чтобы обеспечить надежность сборки и согласованность. Этот параметр триплета можно задать в списке дополнительных переменных среды, которые будут добавлены в чистую среду. Значения этих переменных среды будут хэшированы в abi пакета, чтобы передать переменные среды без отслеживания abi, см. в разделе VCPKG_ENV_PASSTHROUGH_UNTRACKED.

См. vcpkg env также команду для проверки точной среды, которая будет использоваться.

Примечание

Этот список извлекается с помощью вспомогательной vcpkg_get_tags функции.

VCPKG_ENV_PASSTHROUGH_UNTRACKED

Указывает vcpkg разрешить дополнительные переменные среды в процесс сборки без отслеживания abi.

См. раздел VCPKG_ENV_PASSTHROUGH.

VCPKG_VISUAL_STUDIO_PATH

Указывает используемую установку Visual Studio.

Чтобы выбрать точное сочетание экземпляра и набора инструментов Visual Studio, мы рассмотрим следующий алгоритм:

  1. Определите параметр из VCPKG_VISUAL_STUDIO_PATH триплета или переменной VCPKG_VISUAL_STUDIO_PATHсреды или рассмотрите его неустановленный
  2. Определите параметр из VCPKG_PLATFORM_TOOLSET тройной или рассмотрите его неустановленный
  3. Сбор списка всех пар экземпляров Visual Studio со всеми наборами инструментов, доступными в этих экземплярах.
    • Это упорядочено сначала по типу экземпляра (Stable, Prerelease, Legacy), а затем по версиям набора инструментов (версия 143, v142, v141, v140)
  4. Отфильтруйте список на основе параметров и VCPKG_VISUAL_STUDIO_PATH VCPKG_PLATFORM_TOOLSET.
  5. Выберите лучший оставшийся вариант

Путь должен быть абсолютным, отформатированным с обратной косой чертой и не имеет косой черты:

set(VCPKG_VISUAL_STUDIO_PATH "C:\\Program Files (x86)\\Microsoft Visual Studio\\Preview\\Community")

VCPKG_PLATFORM_TOOLSET

Указывает цепочку инструментов компилятора на основе Visual Studio на основе C/C++.

См VCPKG_VISUAL_STUDIO_PATH . полный алгоритм выбора.

Допустимые параметры:

  • Набор инструментов платформы Visual Studio 2022 .v143
  • Набор инструментов платформы Visual Studio 2019 .v142
  • Набор инструментов платформы Visual Studio 2017 .v141
  • Набор инструментов платформы Visual Studio 2015 .v140

VCPKG_PLATFORM_TOOLSET_VERSION

Указывает подробную цепочку инструментов компилятора MSVC C/C++ для использования.

По умолчанию всегда выбирает последнюю установленную дополнительную версию VCPKG_PLATFORM_TOOLSET выбранного набора инструментов. Если требуется более подробная степень детализации, можно использовать эту переменную. Можно указать частичный или полный номер версии. Допустимые значения: например, 14.25 или 14.27.29110.

VCPKG_LOAD_VCVARS_ENV

Определяет, будет ли vcpkg искать и использовать экземпляр Visual Studio в составе тройной среды.

По умолчанию это для ON тройных наборов Windows, которые не указывают VCPKG_CHAINLOAD_TOOLCHAIN_FILE. При указании VCPKG_CHAINLOAD_TOOLCHAIN_FILEтройных и тройных значений, отличных от Windows, это значение OFFпо умолчанию.

Переменные Linux

VCPKG_FIXUP_ELF_RPATH

Если для этого параметра задано значение (true|1|on), vcpkg добавит $ORIGIN и $ORIGIN/<path_relative_to_lib> в RUNPATH заголовок исполняемых файлов и общих библиотек. Это позволяет перемещать пакеты в Linux.

Переменные MacOS

VCPKG_INSTALL_NAME_DIR

Задает имя установки, используемое при создании динамических библиотек macOS. Значение по умолчанию: @rpath. Дополнительные сведения см. в документации по CMake для CMAKE_INSTALL_NAME_DIR .

VCPKG_FIXUP_MACHO_RPATH

Гарантирует, что двоичные файлы Mach-O, созданные vcpkg, перемещаются с помощью относительных имен установки и путей выполнения.

Если задано значение ON:

  • Изменяет абсолютное LC_LC_ID_DYLIB поле @rpath/<library> для двоичных файлов общей библиотеки;
  • Изменяет абсолютные LC_RPATH поля на относительные @loader_path/<relative/path/to/library> для исполняемых и общих двоичных файлов библиотеки.

Важно!

Эта функция включена по умолчанию.VCPKG_TARGET_IS_OSX TRUE Чтобы отключить, явно задайте VCPKG_FIXUP_MACHO_RPATH значение OFF в тройном файле.

Дополнительные сведения о динамических библиотеках в macOS см. по следующим ссылкам:

VCPKG_OSX_DEPLOYMENT_TARGET

Задает минимальную версию macOS для скомпилированных двоичных файлов. Это также изменяет версии пакета SDK для платформы macOS CMake. Дополнительные сведения см. в документации по CMake для CMAKE_OSX_DEPLOYMENT_TARGET .

VCPKG_OSX_SYSROOT

Задайте имя или путь пакета SDK платформы macOS, который будет использоваться CMake. Дополнительные сведения см. в документации по CMake для CMAKE_OSX_SYSROOT .

VCPKG_OSX_ARCHITECTURES

Задайте целевую архитектуру macOS или iOS, которая будет использоваться CMake. Дополнительные сведения см. в документации по CMake для CMAKE_OSX_ARCHITECTURES .

Настройка для каждого порта

Переменная PORT CMake будет задана при интерпретации тройного файла. Его можно использовать для изменения параметров (например VCPKG_LIBRARY_LINKAGE, на основе каждого порта).

Пример:

set(VCPKG_LIBRARY_LINKAGE static)
if(PORT MATCHES "qt5-")
    set(VCPKG_LIBRARY_LINKAGE dynamic)
endif()

Это создаст все qt5-* порты как динамические библиотеки, но все остальные порты в виде статической библиотеки.

Пример в реальном проекте см. в разделе https://github.com/Intelight/vcpkg/blob/master/triplets/x86-windows-mixed.cmake.