Triplet 變數
本文說明三重檔案可用的 vcpkg 變數。 三重檔案也可以包含使用者定義的變數。
變數
VCPKG_TARGET_ARCHITECTURE
指定目標計算機架構。
有效選項包括x86
、x64
、、、riscv32
s390x
loongarch32
arm
arm64ec
arm64
ppc64le
riscv64
、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
(適用於 Windows 的極簡主義 GNU)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
設定附加至 configure 命令的其他 Meson 設定選項(在 中 vcpkg_configure_meson
)。
這是選用欄位。
也可作為組建類型特定 VCPKG_MESON_CONFIGURE_OPTIONS_DEBUG
和 VCPKG_MESON_CONFIGURE_OPTIONS_RELEASE
變數使用。
VCPKG_MESON_NATIVE_FILE_RELEASE
提供額外的組態相依檔案作為 meson 交叉/原生檔案。 可用來覆寫 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
設定附加至 configure 命令的其他 CMake 設定選項(在 中 vcpkg_cmake_configure
)。
這是選用欄位。
也可作為組建類型特定 VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG
和 VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE
變數使用。
VCPKG_CONFIGURE_MAKE_OPTIONS
設定附加至 configure 命令的其他 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
執行 portfile.cmake 之後要包含的 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 的實驗功能,隨時可能會變更或移除。
取代三重項「支援」字詞的預設計算清單。
此選項 (如果 set) 會覆寫平台 表示式 評估所使用的預設字詞集。
如需詳細資訊, "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_VISUAL_STUDIO_PATH
指定要使用的 Visual Studio 安裝。
若要選取 Visual Studio 實例和工具組版本的精確組合,我們會逐步解說下列演算法:
- 從 triplet 或環境變數
VCPKG_VISUAL_STUDIO_PATH
判斷 的設定VCPKG_VISUAL_STUDIO_PATH
,或將其視為未設定 - 從三重判斷 的設定
VCPKG_PLATFORM_TOOLSET
,或將其視為未設定 - 收集所有配對的Visual Studio實例清單,其中包含這些實例中所有可用的工具組
- 這會先依實例類型排序(穩定、發行前版本、舊版),然後依工具組版本排序 (v143, v142, v141, v140)
- 根據和
VCPKG_PLATFORM_TOOLSET
的VCPKG_VISUAL_STUDIO_PATH
設定篩選清單。 - 選取最佳剩餘選項
路徑應該是絕對路徑,使用反斜杠格式化,而且沒有尾端斜線:
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
針對未指定 VCPKG_CHAINLOAD_TOOLCHAIN_FILE
的 Windows 三胞胎。 針對指定 VCPKG_CHAINLOAD_TOOLCHAIN_FILE
的非 Windows 三胞胎和三胞胎,這會預設為 OFF
。
Linux 變數
VCPKG_FIXUP_ELF_RPATH
當此選項設定為 (true|1|on), vcpkg 會將 和 $ORIGIN/<path_relative_to_lib>
新增$ORIGIN
至RUNPATH
可執行檔和共用連結庫的標頭。 這可讓套件重新放置於Linux上。
MacOS 變數
VCPKG_INSTALL_NAME_DIR
設定建置 macOS 動態連結庫時所使用的安裝名稱。 預設值為 @rpath
。 如需詳細資訊,請參閱 CMake 檔以取得 CMAKE_INSTALL_NAME_DIR 。
VCPKG_FIXUP_MACHO_RPATH
使用相對安裝名稱和執行路徑,確保 vcpkg 所建置的 Mach-O 二進位檔可重新配置。
設定為 ON
時:
- 將共享連結庫二進位檔的絕對
LC_LC_ID_DYLIB
欄位修改為@rpath/<library>
; - 將絕對
LC_RPATH
欄位修改為可執行檔和共享連結庫二進位檔的相對@loader_path/<relative/path/to/library>
欄位。
重要
當 是 TRUE
時VCPKG_TARGET_IS_OSX
,預設會啟用此功能。 若要停用,請在三重檔案中明確設定VCPKG_FIXUP_MACHO_RPATH
為 OFF
。
如需macOS上動態連結庫的詳細資訊,請參閱下列連結:
VCPKG_OSX_DEPLOYMENT_TARGET
設定已編譯二進位檔的最低 macOS 版本。 這也會變更macOS平臺SDK CMake將搜尋的版本。 如需詳細資訊,請參閱 CMake 檔以 取得CMAKE_OSX_DEPLOYMENT_TARGET 。
VCPKG_OSX_SYSROOT
設定 CMake 將使用之 macOS 平臺 SDK 的名稱或路徑。 如需詳細資訊,請參閱 CMake 檔以 取得CMAKE_OSX_SYSROOT 。
VCPKG_OSX_ARCHITECTURES
設定 CMake 將使用的 macOS /iOS 目標架構。 如需詳細資訊,請參閱 CMake 檔以取得CMAKE_OSX_ARCHITECTURES。
個別埠自定義
解譯三重檔案時,將會設定 CMake 變數 PORT
。 它可用來根據每個埠變更設定(例如 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。