一、Vcpkg 入门
1.1 vcpkg 安装
(1) 设置powershell代理
官方推荐使用powershell
终端,为了方便代码下载,这里设置代理。
临时设置代理(仅当前会话有效)
# 设置HTTP和HTTPS代理(注意要带"$",不然会被认为是字符串)
$env:HTTP_PROXY = "http://127.0.0.1:11819"
$env:HTTPS_PROXY = "http://127.0.0.1:11819"
# 验证代理是否生效(不用重启终端)
Invoke-WebRequest -Uri "https://www.google.com" -Proxy $env:HTTP_PROXY -TimeoutSec 10
# 清除代理设置
$env:HTTP_PROXY = $null
$env:HTTPS_PROXY = $null
永久设置代理(对所有会话有效)
# 设置HTTP和HTTPS代理
[Environment]::SetEnvironmentVariable("HTTP_PROXY", "http://127.0.0.1:11819", "User")
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", "http://127.0.0.1:11819", "User")
# 验证代理是否生效(!!!要重启终端)
Invoke-WebRequest -Uri "https://www.google.com" -TimeoutSec 10
# 清除代理设置
[Environment]::SetEnvironmentVariable("HTTP_PROXY", $null, "User")
[Environment]::SetEnvironmentVariable("HTTPS_PROXY", $null, "User")
使用Invoke-WebRequest测试代理时 注意:
- PowerShell 5.1 网络请求默认依赖系统代理设置,对
HTTP_PROXY
支持有限,需要显式配置成参数-Proxy $env:HTTP_PROXY
- PowerShell 7.0+ 全面支持通过
HTTP_PROXY
、HTTPS_PROXY
等环境变量,不用显式配置成参数。 - 获取Powershell版本:
$PSVersionTable.PSVersion
(2)下载vcpkg源码并编译
# 下载源码
cd d:\
git clone https://github.com/microsoft/vcpkg
# 编译
cd vcpkg
.\bootstrap-vcpkg.bat
编译好以后 会在同级目录下生成vcpkg.exe
文件
(3)配置环境变量(可选)
为了方便在其他地方使用vcpkg,将vcpkg路径添加到环境变量中。
1.2 vcpkg 常用命令
- 查找库:
\vcpkg.exe search jsoncpp
【查找jsoncpp库】 - 安装库:
.\vcpkg.exe install jsoncp
【会下载工具和源码,然后编译安装】 - 列出已安装的库:
.\vcpkg.exe list
- 导出库:
vcpkg export jsoncpp --7zip
【支持多种格式:–7zip –raw –nuget –ifw –zip】 - 卸载库:
.\vcpkg.exe remove jsoncpp
- 移除过时包:
.\vcpkg.exe remove --outdated
- 更新库:
vcpkg update xxx
二、Vcpkg 进阶使用
2.1 安装指定类型的库
我需要安装64位的动态库 应该怎样设置呢?vcpkg提供多种cmake配置文件(也叫三元组文件) 用来生成对应类型的库。
(1)查看有那些cmake配置:
# 这里用findstr进行了过滤,我只需要64位Windows的库。
PS D:\Program\Vcpkg\vcpkg> .\vcpkg.exe help triplet | findstr x64-win
x64-windows # 动态库(debug+release)
x64-windows-release # 动态库(releas)
x64-windows-static # 静态库(debug+release)
x64-windows-static-release # 静态库(releas)
x64-windows-static-md # 静态库(debug+release、动态运行时库)
x64-windows-static-md-release # 静态库(release、动态运行时库)
Triplet 名称 | 库链接方式 | 运行时库链接 | 构建类型 |
---|---|---|---|
x64-windows | 动态 (DLL) | 动态 (/MD ) | Debug + Release |
x64-windows-release | 动态 (DLL) | 动态 (/MD ) | Release Only |
x64-windows-static | 静态 (LIB) | 静态 (/MT ) | Debug + Release |
x64-windows-static-release | 静态 (LIB) | 静态 (/MT ) | Release Only |
x64-windows-static-md | 静态 (LIB) | 动态 (/MD ) | Debug + Release |
x64-windows-static-md-release | 静态 (LIB) | 动态 (/MD ) | Release Only |
(2)cmake配置文件的命名格式:<架构>-<平台>-<链接方式>
- 架构(
VCPKG_TARGET_ARCHITECTURE
):x64、x86、arm、arm64 - 平台(
VCPKG_CMAKE_SYSTEM_NAME
):Windows、Linux、Android、Darwin等 - 链接方式
- 编译类型(
VCPKG_BUILD_TYPE
):release、debug - 库类型(
VCPKG_LIBRARY_LINKAGE
): dynamic、static - 运行时库类型(
VCPKG_CRT_LINKAGE
):dynamic、static
- 编译类型(
(3)安装指定类型的库:
# 通过:<库名:配置类型>
.\vcpkg.exe install jsoncpp:x64-windows-static
# 通过--triplet选项指定配置类型
.\vcpkg.exe install jsoncpp --triplet x64-windows-release
2.2 导出库
(1)vcpkg支持 导出的格式
格式参数 | 说明 |
---|---|
–raw | 未压缩的目录格式 |
–zip | ZIP压缩包格式 |
–7zip | 7z压缩包格式 |
–nuget | IFW安装器格式(试验性) |
–ifw | 未压缩的目录格式 |
–prefab | Android Prefab格式(试验性) |
(2)导出库
列出已安装的库:
# 我只导出jsoncpp,这里用findstr进行过滤
PS D:\Download\tp> vcpkg.exe list |findstr jsoncpp
jsoncpp:x64-windows 1.9.6 JsonCpp is a C++ library that allows manipulatin...
jsoncpp:x64-windows-release 1.9.6 JsonCpp is a C++ library that allows manipulatin...
jsoncpp:x64-windows-static 1.9.6 JsonCpp is a C++ library that allows manipulatin...
导出库:
# 导出的库在vcpkg的安装目录下。
vcpkg.exe export jsoncpp:x64-windows --raw
# 导出的库在D:\export目录下
vcpkg.exe export jsoncpp:x64-windows --raw --output-dir=D:\export
# 导出的库在D:\export目录下,而且目录名称为mylib
vcpkg.exe export jsoncpp:x64-windows --raw --output-dir=D:\export --output=mylib
2.3 安装指定版本的库
vcpkg目前还不支持命令行直接指定版本的功能,推荐使用vcpkg.json
的overrides
字段管理版本(这个方法可以在项目中使用 且不用导出库,使用方便)
(1)查看库有那些版本
查看库有那些版本:vcpkg.io
(2)创建目录和vcpkg.json文件
创建临时目录tmp:
在tmp目录下创建vcpkg.json文件:
{
"builtin-baseline": "984f9232b2fe0eb94f5e9f161d6c632c581fff0c",
"dependencies": [
"jsoncpp"
],
"overrides": [
{
"name": "jsoncpp",
"version": "1.9.5",
"port-version": 5
}
]
}
说明:
builtin-baseline
:是vcpkg的commit-id
,vcpkg如果是解压安装的 是无法获取- 获取commit-id:
git -C D:\Program\Vcpkg\vcpkg rev-parse HEAD
- 获取commit-id:
dependencies
:只需要填写库名称即可。version
:库主版本号port-version
: vcpkg端口版本号
(3)编译安装库
vcpkg.exe install --triplet x64-windows --x-install-root=.\3rdparty
注意:--x-install-root
是指定库的安装目录,最终库的目录是:3rdparty\x64-windows
指定版本的库已安装成功:
2.4 指定编译器
当系统有多个版本的编译器时,如安装VS2017和VS2019,vcpkg是用那个编译器编译的呢?答案是VS2019,因为vcpkg默认使用最新版本的编译器编译,如果要使用VS2017,则需要配置环境变量。
(1) 默认行为
- Windows 系统:vcpkg 默认使用最新安装的 Visual Studio 的 MSVC 编译器
- Linux/macOS:默认使用系统默认的 GCC 或 Clang
(2)通过设置环境变量指定编译器
MSVC编译器:
$env:VCPKG_VISUAL_STUDIO_PATH = "D:\Program\Program Files (x86)\Microsoft Visual Studio\2017\Community"
MinGW编译器:
$env:VCPKG_PLATFORM_TOOLSET = "MinGW" # 或者具体版本如 "MinGW-8.1.0"
$env:CC = "gcc.exe"
$env:CXX = "g++.exe"
(3)编译安装
vcpkg.exe install --triplet x64-windows --x-install-root=.\3rdparty
参考文章: