记录自己安装 cpp 包管理 vcpkg 的过程
[toc]
0. 开发环境
1. 下载 vcpkg
2. 编译安装
3. 使用 vcpkg 的坑
4. 结语
0. 开发环境
- 操作系统 Windows10
- 编译环境 visual studio 2017(虽然笔者使用 vs 开发,但是项目构建采用 vs 内建的 cmake)
1.下载 vcpkg
vcpkg 项目地址:https://github.com/Microsoft/...
由于国内环境,不推荐直接下载(整个项目大约 80 MB),我推荐下面两种下载方式:
- 使用 Gitee 下载,Gitee 上有一个 vcpkg 加速下载的项目
- 使用 https://gitclone.com/github.c... 下载,下载原理参见 Github下载速度慢 提升github下载速度最新解决方案 跟龟速说拜拜(持续更新 保证方案可行 建议收藏)
2. 编译安装
直接运行 bootstrap-vcpkg.bat (Windows)
将生成的 vcpkg.exe 添加到用户 PATH 中,Windows 系统注销后重新登录,使 PATH 刷新
如果 vcpkg 在运行时崩溃,建议以 Debug 模式重新编译安装 vcpkg(保证使用 vs 调试时有充足的调试信息),这样可以在崩溃时使用 vs attach 到 vcpkg 进程进行 debug 。笔者第一次安装时 vcpkg.exe 直接 crash,我重新编译一遍(设置 msbuild 为 debug 模式)后,attach 到 vcpkg.exe 后,发现抛出的异常显示 copy pwsh.exe powershell.exe 失败,大概率是因为 powershell 7 安装到了 C:Program Files ,而这个文件夹下的复制操作都需要管理员权限,导致 copy 操作失败而抛出异常。
3. 使用 vcpkg 的坑
3.1 vcpkg install xxx
笔者下载第三方库时,发现 vcpkg 没有识别笔者开发环境中的 git 和 cmake,然后它居然开始下载他们……
打开 vcpkg 项目的下载目录,修改 vcpkgscriptsvcpkgTools.xml 配置文件:
(下面的配置文件为摘选,列出的 tool 仅仅为笔者环境中需要重新配置的项目)
<?xml version="1.0"?>
<tools version="2">
<tool name="cmake" os="windows">
<version>3.15.5</version>
<exeRelativePath>完整安装目录\cmake.exe</exeRelativePath>
<url>......</url>
<sha512>......</sha512>
<archiveName>......</archiveName>
</tool>
<tool name="git" os="windows">
<version>2.14.4</version>
<exeRelativePath>完整安装目录\git.exe</exeRelativePath>
<url>......</url>
<sha512>......</sha512>
<archiveName>......</archiveName>
</tool>
<tool name="7zip" os="windows">
<version>19.0.0</version>
<exeRelativePath>完整安装目录\7z.exe</exeRelativePath>
<url>......</sha512>
<archiveName>......</archiveName>
</tool>
<tool name="powershell-core" os="windows">
<version>7.0.3</version>
<exeRelativePath>完整安装目录\pwsh.exe</exeRelativePath>
<url>......</url>
<sha512>......</sha512>
<archiveName>......</archiveName>
</tool>
</tools>
读者需要根据自己的配置文件,下载安装缺失的 tool,并配置 <version> 和 <exeRelativePath>
(尤其注意不要把 version 填错了,不然 vcpkg 会认为版本不对而重新下载对应 version 的版本)
笔者在安装 powershell 7 后,将其安装在C:\Program Files
下。根据上文 2. 中所述,最终发现 vcpkg.exe 居然执行了 copy 操作,进一步导致抛出异常。笔者最后修改了 powershell7 安装目录的
属性
和安全选项卡
允许对目录和目录下文件的写操作,解决了这个问题。读者也可以将其安装到其他目录下以提前解决这个问题(windows diss!)
3.2 visual studio cmake
笔者使用 vs 来开发 cmake 项目。
- 配置 vs cmake 项目
由于使用 vcpkg 配合 cmake,需要设置 CMAKE_TOOLCHAIN_FILE
和 VCPKG_TARGET_TRIPLET
,所以笔者使用 CMakeSettings.json 配置文件(点击 vs 的菜单栏 > CMake > 更改CMake设置),添加 “variables” 项目,并在 “variables” 中添加两项:
{
"configurations": [
{
"variables": [
{
"name": "CMAKE_TOOLCHAIN_FILE",
"value": "vcpkg完整安装目录\\vcpkg\\scripts\\buildsystems\\vcpkg.cmake"
},
{
"name": "VCPKG_TARGET_TRIPLET",
"value": "编译目标x64-windows-static"
}
]
}
]
}
- 处理
find_package()
找不到第三方包问题
笔者环境下,这个问题是因为 vs 集成的 cmake 工具版本太低。
笔者将其他版本的 cmake 安装目录直接覆盖了 vs 内建的 cmake 目录(D:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake
),注意覆盖的不是 CMake/bin/cmake.exe,而是 CMake 整个目录
4. 结语
- 环境配置花了一晚上 + 一上午的时间……
- 如果 vcpkg.exe 运行时直接 crash,请利用 2. 介绍的方法自行 debug
- 如果 vcpkg 在安装某个第三方包时失败,请仔细查看 error 信息(笔者经常发现是 cmake 或 git 的原因,尝试重新安装高版本就可以了)
- vcpkg 国内下载速度很慢,大多时候笔者都是自己手动下载压缩文件,然后交给 vcpkg 管理(具体细节请自行搜索,非常简单^_^)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。