本文介绍在Windows平台上如何使用vcpkg工具来进行安装和验证C/C++库的过程。
vcpkg 概述
Vcpkg 是由 Microsoft 和 C++ 社区维护的免费开源 C/C++ 包管理器,可在 Windows、macOS 和 Linux 上运行。 它是核心的 C++ 工具,使用 C++ 和 CMake 脚本编写。 它旨在解决管理 C/C++ 库的独特难题。
为什么使用 vcpkg?
- 在特选注册表中有超过 2300 个开源库可供选择,这些库会定期生成,用于验证 ABI 兼容性
- 使用自己的自定义库包创建自定义库注册表
- 适用于 Windows、macOS 和 Linux 的一致的跨平台体验
- 使用任何生成和项目系统轻松将库添加到项目
- 从源生成依赖项或下载预生成的 ABI 验证二进制文件,默认提供 70 多个配置,并可针对特定要求进行无限自定义
- 通过独特的版本控制设计,防止依赖项之间出现版本冲突和菱形依赖问题
- 对于 MSBuild 和 CMake 用户:自动与生成环境集成,打造无缝获取依赖项的体验
- 受到学生、开源开发人员、业余爱好者和专业人士的信任,包括一些大型企业
vcpkg 功能
端口和三元组
vcpkg 端口是一种版本控制生成方案,可生成一个包。 最常见的包类型是包含标头、源代码和二进制文件的 C/C++ 库。
三元组以单个方便的名称捕获目标生成环境(cpu、os、编译器、运行时等)。 vcpkg 默认提供超过 70 个三元组,但你也可以定义自己的三元组。
为了在系统上安装包,vcpkg 会运行端口的配方文件(CMake 脚本)。 该脚本可能包含下载源代码或在系统中运行生成的步骤。 在生成期间,vcpkg 使用三元组中的信息来确保生成的包与所需的配置匹配。
以 libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static库为例;包括克隆vcpkg仓库、运行bootstrap脚本、执行安装步骤以及确认安装成功
先决条件
- 终端
- C++ 编译器
- CMake
- Git
设置 vcpkg
克隆存储库
第一步是从 GitHub 克隆 vcpkg 存储库。 存储库包含用于获取 vcpkg 可执行文件的脚本,以及由 vcpkg 社区维护的特选开放源代码库的注册表。
要执行此操作,先创建一个vcpkg安装目录;在该目录下,通过git-bash运行git命令:
git clone https://github.com/microsoft/vcpkg.git
vcpkg 特选注册表是一组数量超过 2000 个的开源库。 这些库已通过 vcpkg 的持续集成管道进行验证,可以协同工作。 虽然 vcpkg 存储库不包含这些库的源代码,但它保存方案和元数据,以便在系统中生成和安装它们。
运行启动脚本
现在,你已经克隆了 vcpkg 存储库,请导航到 vcpkg 仓库根目录并执行启动脚本:
打开控制台:
./bootstrap-vcpkg.bat
启动脚本执行先决条件检查并下载 vcpkg 可执行文件。
注意事项:
执行bootstrap-vcpkg.bat命令下载的vcpkg.exe不要移动到其他目录,否者会导致后续安装库报错。
本人就因为将可执行文件移到其他目录导致安装报错,如下:
PS C:\vcpkg> vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static
error: Invalid triplet: x86-windows
Available architecture triplets:
vcpkg built-in triplets:
VCPKG community triplets:
PS C:\vcpkg>
安装库时会遇到的常见错误
PS C:\vcpkg> vcpkg install libvpx:x64-windows-static libyuv:x64-windows-static opus:x64-windows-static aom:x64-windows-static
Computing installation plan...
The following packages will be built and installed:
aom:x64-windows-static@3.9.1
* libjpeg-turbo:x64-windows-static@3.0.3#1
libvpx:x64-windows-static@1.13.1#3
libyuv:x64-windows-static@1895
opus:x64-windows-static@1.5.1
* pkgconf:x64-windows@2.3.0
* vcpkg-cmake-config:x64-windows@2024-05-23
* vcpkg-msbuild:x64-windows@2023-08-08
* vcpkg-pkgconfig-get-modules:x64-windows@2024-04-03
Additional packages (*) will be modified to complete this operation.
Detecting compiler hash for triplet x64-windows...
Compiler found: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe
Detecting compiler hash for triplet x64-windows-static...
Compiler found: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.29.30133/bin/Hostx64/x64/cl.exe
Restored 0 package(s) from C:\Users\ygh\AppData\Local\vcpkg\archives in 184 us. Use --debug to see more details.
Installing 1/9 vcpkg-cmake-config:x64-windows@2024-05-23...
Building vcpkg-cmake-config:x64-windows@2024-05-23...
-- Installing: C:/vcpkg/packages/vcpkg-cmake-config_x64-windows/share/vcpkg-cmake-config/vcpkg_cmake_config_fixup.cmake
-- Installing: C:/vcpkg/packages/vcpkg-cmake-config_x64-windows/share/vcpkg-cmake-config/vcpkg-port-config.cmake
-- Installing: C:/vcpkg/packages/vcpkg-cmake-config_x64-windows/share/vcpkg-cmake-config/copyright
-- Skipping post-build validation due to VCPKG_POLICY_EMPTY_PACKAGE
Stored binaries in 1 destinations in 28 ms.
Elapsed time to handle vcpkg-cmake-config:x64-windows: 84.5 ms
vcpkg-cmake-config:x64-windows package ABI: 8d72e9c5827325f2468c8bf4c336a2d193117bbe3019164799832410dd388ec6
Installing 2/9 aom:x64-windows-static@3.9.1...
Building aom:x64-windows-static@3.9.1...
-- Fetching https://aomedia.googlesource.com/aom 8ad484f8a18ed1853c094e7d3a4e023b2a92df28...
CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:127 (message):
Command failed: "C:/Program Files/Git/cmd/git.exe" fetch https://aomedia.googlesource.com/aom 8ad484f8a18ed1853c094e7d3a4e023b2a92df28 --depth 1 -n
Working Directory: C:/vcpkg/downloads/git-tmp
Error code: 128
See logs for more information:
C:\vcpkg\buildtrees\aom\git-fetch-x64-windows-static-err.log
Call Stack (most recent call first):
scripts/cmake/vcpkg_from_git.cmake:86 (vcpkg_execute_required_process)
ports/aom/portfile.cmake:1 (vcpkg_from_git)
scripts/ports.cmake:192 (include)
error: building aom:x64-windows-static failed with: BUILD_FAILED
See https://learn.microsoft.com/vcpkg/troubleshoot/build-failures?WT.mc_id=vcpkg_inproduct_cli for more information.
Elapsed time to handle aom:x64-windows-static: 21 s
Please ensure you're using the latest port files with `git pull` and `vcpkg update`.
Then check for known issues at:
https://github.com/microsoft/vcpkg/issues?q=is%3Aissue+is%3Aopen+in%3Atitle+aom
You can submit a new issue at:
https://github.com/microsoft/vcpkg/issues/new?title=[aom]+Build+error+on+x64-windows-static&body=Copy+issue+body+from+C%3A%2Fvcpkg%2Finstalled%2Fvcpkg%2Fissue_body.md
如上在第三十行“Fetching https://aomedia.googlesource.com/aom 8ad484f8a18ed1853c094e7d3a4e023b2a92df28…”处报错;这是因为在国内无法访问到 https://aomedia.googlesource.com/aom 地址(当然如果你的环境如果能访问到该地址则不会出现这样问题)。如果有相同的问题这就需要我们从github上或者gitee上找到与之相同的克隆库地址进行替换(替换文件位置:根目录下的“./ports/aom/portfile.cmake”与“./ports/aom/vcpkg.json”)。