Триплетные переменные
В этой статье описываются переменные vcpkg, доступные для тройных файлов. Триплетный файл также может включать пользовательские переменные.
Ознакомьтесь с документацией по концепциям триплетов для высокоуровневого представления возможностей триплета.
Переменные
VCPKG_TARGET_ARCHITECTURE
Указывает архитектуру целевого компьютера.
Допустимые параметры: x86
, arm
arm64ec
s390x
riscv32
ppc64le
riscv64
loongarch32
arm64
x64
, , loongarch64
mips64
и .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_FLAGS
VCPKG_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, мы рассмотрим следующий алгоритм:
- Определите параметр из
VCPKG_VISUAL_STUDIO_PATH
триплета или переменнойVCPKG_VISUAL_STUDIO_PATH
среды или рассмотрите его неустановленный - Определите параметр из
VCPKG_PLATFORM_TOOLSET
тройной или рассмотрите его неустановленный - Сбор списка всех пар экземпляров Visual Studio со всеми наборами инструментов, доступными в этих экземплярах.
- Это упорядочено сначала по типу экземпляра (Stable, Prerelease, Legacy), а затем по версиям набора инструментов (версия 143, v142, v141, v140)
- Отфильтруйте список на основе параметров и
VCPKG_VISUAL_STUDIO_PATH
VCPKG_PLATFORM_TOOLSET
. - Выберите лучший оставшийся вариант
Путь должен быть абсолютным, отформатированным с обратной косой чертой и не имеет косой черты:
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.