乐趣区

关于c++:cpp-包管理-vcpkg-安装记录

记录本人装置 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),我举荐上面两种下载方式:

  1. 应用 Gitee 下载,Gitee 上有一个 vcpkg 减速下载的我的项目
  2. 应用 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_FILEVCPKG_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 治理(具体细节请自行搜寻,非常简单 ^_^)
退出移动版