Vcpkg—C++包管理工具

Vcpkg—C++包管理工具

Vcpkg简介

Vcpkg是微软团队在GitHub上的一个开源项目。它是一个命令行包管理工具,提供一系列简单的命令,自动下载源码然后编译成三方库,而且并不依赖于Windows注册表或Visual Studio。可以极大地简化三方库的获取、安装、使用和部署流程。

Vcpkg允许多份克隆同时存在于同一台机器上,每一份克隆都是一个完整独立的环境,拥有独立的三方库和编译选项。

一般来说,开发团队会共用同一开发环境。为此,我们可以在一台机器上使用Vcpkg来下载并编译一组二进制文件,然后使用一些导出命令来打包头文件、库文件供团队使用。

Vcpkg安装

Windows安装:

需求:
Windows 7 或更新的版本
Git
Visual Studio 2015 Update 3 或更新的版本(包含英文语言包)

从Github上克隆Vcpkg仓库然后执行安装命令即可:

	git clone https://github.com/microsoft/vcpkg
	.\vcpkg\bootstrap-vcpkg.bat

可选:
设置环境变量——将vcpkg.exe文件所在目录加入到环境变量PATH中

Linux安装:

需求:
Git
g++ >= 6
从Github上克隆Vcpkg仓库然后执行安装命令即可:

	 git clone https://github.com/microsoft/vcpkg
	 ./vcpkg/bootstrap-vcpkg.sh

更新 vcpkg

vcpkg 包管理器在 GitHub 上定期更新。 若要将 vcpkg 的克隆更新到最新版本,请从 vcpkg 根目录运行 git pull。 此命令会将 vcpkg 的副本与 GitHub 上的版本同步。 下载完成后,再次运行引导程序。 引导程序会重新生成 vcpkg 程序,但保留已安装的库。

卸载 vcpkg

若要卸载 vcpkg,只需删除 vcpkg 目录。 删除此目录会卸载 vcpkg 分发以及 vcpkg 已安装的所有库。

但是,如果已执行 vcpkg integrate install,则应执行 vcpkg integrate remove 来确保在删除文件夹之前已清理集成 。

vcpkg集成

Windows 上的 Visual Studio 集成

与手动指定目录不同,我们可以通过一条命令将所有三方库的头文件和二进制文件自动配置到Visual Studio中
从 vcpkg 根目录,运行 vcpkg integrate install来配置 Visual Studio,以便按用户找到所有 vcpkg 头文件和二进制文件。 无需在 Visual Studio 中编辑 VC + + 目录路径。 如果有多个 vcpkg 克隆,则你从中运行此命令的克隆将成为新的默认位置。

vcpkg integrate install
Applied user-wide integration for this vcpkg root.
​
All MSBuild C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.

CMake 集成

Visual Studio Code 中的 CMake Tools
将以下内容添加到您的工作区的 settings.json 中将使CMake Tools自动使用vcpkg中的第三方库:

{
  "cmake.configureSettings": {
    "CMAKE_TOOLCHAIN_FILE": "[vcpkg root]/scripts/buildsystems/vcpkg.cmake"
  }
}

将 vcpkg 作为一个子模块
当您希望将vcpkg作为一个子模块加入到您的工程中时,
您可以在第一个 project() 调用之前将以下内容添加到 CMakeLists.txt 中,
而无需将 CMAKE_TOOLCHAIN_FILE 传递给cmake调用。

set(CMAKE_TOOLCHAIN_FILE ${CMAKE_CURRENT_SOURCE_DIR}/vcpkg/scripts/buildsystems/vcpkg.cmake
  CACHE STRING "Vcpkg toolchain file")

删除 vcpkg 集成

如果已使用 integrate 选项,则应在删除 vcpkg 实例之前删除该集成。 若要删除和清理该集成,请将目录更改为 vcpkg 根目录。

在 Windows 上,运行vcpkg integrate remove,确保清除该集成。
在 Linux 或 macOS 上,运行./vcpkg integrate remove 命令。

Vcpkg使用

搜索可用库

查看可用库列表的命令如下:

vcpkg search 

或加入过滤 如

vcpkg search boost

安装三方库

第三方库的下载和编译命令是vcpkg install。
默认情况下,Vcpkg使用的编译环境是x86-windows, x64-linux.cmake或x64-osx.cmake。
使用指令:vcpkg help triplet可以看到都支持什么平台。

vcpkg install jsoncpp:x64-windows

查询已有的三方库:

 vcpkg list

删除库

vcpkg remove jsoncpp

注意:
这个时候只是移除了默认的x86-winodws版本的文件,如果有其他平台的版本需要移除,需要制定相应的triplet。
移除也只是移除了二进制程序库而已,源码包和解压缩的源码并没有删除。

更新已经安装的开源库

一般有两种更新方式。一个是update指令,可以显示可以升级的开源库的列表。另一个是upgrade的指令,会重新编译所有需要更新的包。

常见命令

Command描述
vcpkg search [pat]搜索可安装的包
vcpkg install < pkg >…卸载包
vcpkg remove < pkg >…卸载包
vcpkg remove --outdated卸载所有过期包
vcpkg list列出已安装的包
vcpkg update显示用于更新的包列表
vcpkg upgrade重新生成所有过期包
vcpkg hash [alg]通过特定算法对文件执行哈希操作,默认为 SHA512
vcpkg integrate install使已安装包在用户范围内可用。 首次使用时需要管理权限
vcpkg integrate remove删除用户范围的集成
vcpkg integrate project为使用单个 VS 项目生成引用 NuGet 包
vcpkg export < pkg >… [ opt ]…导出包
vcpkg edit < pkg >打开端口进行编辑(使用 %EDITOR%,默认为“code”)
vcpkg create < pkg > < url > [archivename]创建新程序包
vcpkg cache列出缓存的已编译包
vcpkg version显示版本信息
vcpkg contact --survey显示联系信息,以便发送反馈。
选项描述
–triplet < t >指定目标体系结构三元组。 (默认:%VCPKG_DEFAULT_TRIPLET%,另请参阅 vcpkg help triplet)
–vcpkg-root 指定 vcpkg 根目录(默认:%VCPKG_ROOT%)

使用模式

vcpkg 有两种使用包的模式 - 经典模式和 清单模式。 对于大多数用户,我们建议使用清单模式。

经典模式

在经典模式下,vcpkg 在由单个 vcpkg install 和 vcpkg remove 命令生成的 vcpkg 实例内维护一个中心安装的树。 然后,任意数量的项目可以共享这组中央包。

由于已安装的包集不与单个项目关联,因此经典模式的运行方式与 或 apt等brew工具类似。 但是,该集仍与 vcpkg 实例相关联,每个 vcpkg (实例(如单独的 git clone 副本) )将安装自己的一组经典模式包。

清单模式

在清单模式下,vcpkg 为每个项目和配置创建单独的 已安装树 。 这允许单独的项目使用不同的库版本。文件和vcpkg.json可选vcpkg-configuration.json文件构成了项目的清单。 清单声明项目的直接依赖项、版本约束和使用的注册表。

  1. 创建 vcpkg 清单文件:
    在你的项目目录中创建一个名为 vcpkg.json 的文件,该文件用于指定项目所需的依赖项和其他配置。

  2. 使用 vcpkg x-update-baseline --add-initial-baseline添加初始 “builtin-baseline”。

vcpkg x-update-baseline --add-initial-baseline

若要更新清单中的基线,使用

 vcpkg x-update-baseline
  1. 定义依赖项:
    在 vcpkg.json 文件中,使用 JSON 格式来定义项目所需的依赖项。例如:
{
    "name": "xtcs",
    "version": "1.0.0",
    "dependencies": [
        "geos",
        "eigen",
        "boost"
    ]
}

版本控制

{
  "$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
  "name": "xtcs",
  "dependencies": [
    {
      "name": "geos",
	  "version>=": "3.11.2"
      
    }
  ],
  "overrides": [
    {
      "name": "geos",
      "version": "3.11.2"
    }
  ],
  "builtin-baseline": "d765306b074717dea8dc1c4723e1b025acb61c2d"
}
  1. 使用 vcpkg 清单模式:
    打开命令行终端,在项目目录中运行 vcpkg 命令,并启用清单模式。例如:
vcpkg install --feature-flags=manifest
  1. 共享 vcpkg 配置:
    使用清单模式后,你可以将 vcpkg.json 文件包含在你的项目代码库中,并与其他项目一起共享。这样,在不同的项目中,只需使用相同的 vcpkg.json 文件,即可共享相同的 vcpkg 配置和依赖项列表,从而方便管理和更新依赖项

参考

vcpkg: A C++ package manager for Windows, Linux and MacOS
vcpkg.json 参考

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值