共计 2773 个字符,预计需要花费 7 分钟才能阅读完成。
记录本人装置 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 治理(具体细节请自行搜寻,非常简单 ^_^)