Triplet variables
This article describes the vcpkg variables that are available to triplet files. A triplet file can also include user defined variables.
See the triplets concept documentation for a high-level view of triplet capabilities.
Specifies the target machine architecture.
Valid options include x86
, x64
, arm
, arm64
, arm64ec
, s390x
, ppc64le
, riscv32
, riscv64
, loongarch32
, loongarch64
, mips64
, and wasm32
.
Specifies the desired CRT linkage (for MSVC).
Valid options are dynamic
and static
.
Specifies the preferred library linkage.
Valid options are dynamic
and static
. Libraries can ignore this setting if
they do not support the preferred linkage type.
You can set this value to release
to build release-only versions of the ports.
By default this value is empty. When this value is empty vcpkg builds release
and debug configurations of ports.
Specifies the target platform.
Valid options include any CMake system name, such as:
- Empty (Windows Desktop for legacy reasons)
WindowsStore
(Universal Windows Platform)MinGW
(Minimalist GNU for Windows)Darwin
(Mac OSX)iOS
(iOS)Linux
(Linux)Emscripten
(WebAssembly)
Specifies the target platform system version.
This field is optional and, if present, will be passed into the build as
CMAKE_SYSTEM_VERSION
.
See also the CMake documentation for
CMAKE_SYSTEM_VERSION
Specifies an alternate CMake toolchain file to use.
This (if set) will override all other compiler detection logic. By default, a
toolchain file is selected from scripts/toolchains/
appropriate to the
platform.
Note
To create a custom toolchain file, it's best to start by including an existing
toolchain from ${VCPKG_ROOT}/scripts/toolchains
and extend it. This ensures that
essential variables set by the vcpkg executable, such as VCPKG_TARGET_ARCHITECTURE
,
VCPKG_CXX_FLAGS
, VCPKG_LINKER_FLAGS
, and other variables are forwarded to CMake.
See also the CMake documentation for toolchain files.
Sets additional compiler flags to be used when not using
VCPKG_CHAINLOAD_TOOLCHAIN_FILE
.
This option also has forms for configuration-specific flags and C language flags:
VCPKG_CXX_FLAGS
VCPKG_CXX_FLAGS_DEBUG
VCPKG_CXX_FLAGS_RELEASE
VCPKG_C_FLAGS
VCPKG_C_FLAGS_DEBUG
VCPKG_C_FLAGS_RELEASE
If you set VCPKG_CXX_FLAGS
, you also have to set VCPKG_C_FLAGS
, and vice-versa.
The same is true for the configuration-specific flags. These variables accept a
space-delimited string of compiler flags:
set(VCPKG_CXX_FLAGS "/wd4996 -D_CRT_SECURE_NO_WARNINGS")
set(VCPKG_C_FLAGS "/wd4996 -D_CRT_SECURE_NO_WARNINGS")
Sets additional linker flags to be used while building dynamic libraries and
executables in the absence of VCPKG_CHAINLOAD_TOOLCHAIN_FILE
.
This option also has forms for configuration-specific flags:
VCPKG_LINKER_FLAGS
VCPKG_LINKER_FLAGS_DEBUG
VCPKG_LINKER_FLAGS_RELEASE
Set additional Meson configure options that are appended to the configure
command (in
vcpkg_configure_meson
).
This field is optional.
Also available as build-type specific VCPKG_MESON_CONFIGURE_OPTIONS_DEBUG
and
VCPKG_MESON_CONFIGURE_OPTIONS_RELEASE
variables.
Provide an additional configuration dependent file as a meson cross/native file. Can be used to override settings provided by vcpkg since it will be passed after vcpkg's generated cross/native files are passed.
Especially useful to provide your own build_machine and host_machine entries.
See VCPKG_MESON_NATIVE_FILE_RELEASE.
See VCPKG_MESON_NATIVE_FILE_RELEASE.
See VCPKG_MESON_NATIVE_FILE_RELEASE.
Sets additional CMake configure options that are appended to the configure
command (in
vcpkg_cmake_configure
).
This field is optional.
Also available as build-type specific VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG
and
VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE
variables.
Set additional automake/autoconf configure options that are appended to the
configure command (in
vcpkg_configure_make
).
This field is optional.
For example, to skip certain libtool checks that may errantly fail:
set(VCPKG_CONFIGURE_MAKE_OPTIONS "lt_cv_deplibs_check_method=pass_all")
Also available as build-type specific VCPKG_CONFIGURE_MAKE_OPTIONS_DEBUG
and
VCPKG_CONFIGURE_MAKE_OPTIONS_RELEASE
variables.
A list of files to include in the calculation of package ABI hashes.
This field is optional.
Declare any files that affect the contents of a package and should be factored into the calculation of the ABI hash. For example:
- Files that are included (via
include(filepath)
) in custom triplets and toolchains. - Files that are defined in
VCPKG_MESON_(NATIVE|CROSS)_FILE_<CONFIG>
Only the contents and order of the files are considered, the paths of the files do not affect the ABI hash.
set(VCPKG_HASH_ADDITIONAL_FILES
"${CMAKE_CURRENT_LIST_DIR}/file1.cmake"
"${CMAKE_CURRENT_LIST_DIR}/meson-cross.txt"
)
A list of CMake files to include after the execution of portfile.cmake.
This field is optional.
The contents and order of the files are used for the ABI hash, the paths of the files do not affect the ABI hash.
set(VCPKG_POST_PORTFILE_INCLUDES
"${CMAKE_CURRENT_LIST_DIR}/file1.cmake"
"${CMAKE_CURRENT_LIST_DIR}/file2.cmake"
)
Note
This section covers an experimental feature of vcpkg which may change or be removed at any time.
Replaces the default computed list of triplet "Supports" terms.
This option (if set) will override the default set of terms used for Platform Expression evaluation.
See the "supports"
manifest file field
documentation for more details.
Note
This list is extracted via the vcpkg_get_dep_info
helper function.
Warning
Enabling this option is not recommended since it can lead to ABI incompatibility in restored binary packages. See the binary caching documentation to learn more
When this option is set to TRUE
, ON
, or 1
, the compiler will not be
tracked as part of the package abis.
This will cause binary caching to reuse builds from older or newer compilers.
Instructs vcpkg to allow additional environment variables into the build process.
On Windows, vcpkg builds packages in a special clean environment that is
isolated from the current command prompt to ensure build reliability and
consistency. This triplet option can be set to a list of additional environment
variables that will be added to the clean environment. The values of these
environment variables will be hashed into the package abi -- to pass through
environment variables without abi tracking, see
VCPKG_ENV_PASSTHROUGH_UNTRACKED
.
See also the vcpkg env
command for how you can inspect
the precise environment that will be used.
Note
This list is extracted via the vcpkg_get_tags
helper function.
Instructs vcpkg to allow additional environment variables into the build process without abi tracking.
Specifies the Visual Studio installation to use.
To select the precise combination of Visual Studio instance and toolset version, we walk through the following algorithm:
- Determine the setting for
VCPKG_VISUAL_STUDIO_PATH
from the triplet, or the environment variableVCPKG_VISUAL_STUDIO_PATH
, or consider it unset - Determine the setting for
VCPKG_PLATFORM_TOOLSET
from the triplet or consider it unset - Gather a list of all pairs of Visual Studio instances with all toolsets
available in those instances
- This is ordered first by instance type (Stable, Prerelease, Legacy) and then by toolset version (v143, v142, v141, v140)
- Filter the list based on the settings for
VCPKG_VISUAL_STUDIO_PATH
andVCPKG_PLATFORM_TOOLSET
. - Select the best remaining option
The path should be absolute, formatted with backslashes, and have no trailing slash:
set(VCPKG_VISUAL_STUDIO_PATH "C:\\Program Files (x86)\\Microsoft Visual Studio\\Preview\\Community")
Specifies the Visual Studio-based C/C++ compiler toolchain to use.
See VCPKG_VISUAL_STUDIO_PATH
for the full
selection algorithm.
Valid settings:
- The Visual Studio 2022 platform toolset is
v143
. - The Visual Studio 2019 platform toolset is
v142
. - The Visual Studio 2017 platform toolset is
v141
. - The Visual Studio 2015 platform toolset is
v140
.
Specifies the detailed MSVC C/C++ compiler toolchain to use.
By default, VCPKG_PLATFORM_TOOLSET
always chooses the latest installed minor
version of the selected toolset. If you need more granularity, you can use this
variable. You can specify either a partial or a full version number. Valid values are,
for example, 14.25
or 14.27.29110
.
Determines whether vcpkg will search for and use an instance of Visual Studio as part of the triplet environment.
By default, this is ON
for Windows triplets that do not specify
VCPKG_CHAINLOAD_TOOLCHAIN_FILE
. For
non-Windows triplets and triplets specifying VCPKG_CHAINLOAD_TOOLCHAIN_FILE
,
this defaults to OFF
.
When this option is set to (true|1|on), vcpkg will add $ORIGIN
and
$ORIGIN/<path_relative_to_lib>
to the RUNPATH
header of executables and
shared libraries. This allows packages to be relocated on Linux.
Sets the install name used when building macOS dynamic libraries. Default value
is @rpath
. See the CMake documentation for
CMAKE_INSTALL_NAME_DIR
for more information.
Ensures Mach-O binaries built by vcpkg are relocatable by using relative install names and run-paths.
When set to ON
:
- Modifies absolute
LC_LC_ID_DYLIB
field to@rpath/<library>
for shared library binaries; - Modifies absolute
LC_RPATH
fields to relative@loader_path/<relative/path/to/library>
for executable and shared library binaries.
Important
This functionality is enabled by default when VCPKG_TARGET_IS_OSX
is TRUE
. To disable, explicitly set VCPKG_FIXUP_MACHO_RPATH
to OFF
in a triplet file.
For more information about dynamic libraries on macOS, refer to the following links:
- Dynamic Library Identification
- Dynamic Library Standard Setup for Apps
- Dynamic Library Full Path Alternative
- Embedding nonstandard code structures in a bundle
Sets the minimum macOS version for compiled binaries. This also changes what versions of the macOS platform SDK CMake will search for. See the CMake documentation for CMAKE_OSX_DEPLOYMENT_TARGET for more information.
Set the name or path of the macOS platform SDK that will be used by CMake. See the CMake documentation for CMAKE_OSX_SYSROOT for more information.
Set the macOS / iOS target architecture which will be used by CMake. See the CMake documentation for CMAKE_OSX_ARCHITECTURES for more information.
The CMake variable PORT
will be set when interpreting the triplet file. It can be
used to change settings (such as VCPKG_LIBRARY_LINKAGE
) on a per-port basis.
Example:
set(VCPKG_LIBRARY_LINKAGE static)
if(PORT MATCHES "qt5-")
set(VCPKG_LIBRARY_LINKAGE dynamic)
endif()
This will build all the qt5-*
ports as dynamic libraries, but every other port as a
static library.
For an example in a real project, see https://github.com/Intelight/vcpkg/blob/master/triplets/x86-windows-mixed.cmake.
vcpkg feedback
vcpkg is an open source project. Select a link to provide feedback: