Vcpkg的使用

Vcpkg的使用

一、安装Vcpkg

1. 下载 vcpkg,并在Window下安装

PS> git clone https://github.com/Microsoft/vcpkg.git

2. 编译vcpkg

PS> cd vcpkg
PS> .\bootstrap-vcpkg.bat
# Linux:~/$ ./bootstrap-vcpkg.sh

二、集成到系统环境

1. 集成到全局

.\vcpkg.exe integrate install
.\vcpkg.exe integrate remove

2. 集成到工程

.\vcpkg.exe integrate project

这时候会在“\scripts\buildsystems”目录下,生成nuget配置文件.

其中是指vcpkg实际所在目录。

打开Visual Studio,点击菜单“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击“程序包源”

在这里插入图片描述

用Visual Studio 打开一个工程或解决方案。右键点击需要设置的工程,选择“管理NuGet程序包”。在右上角的“程序包源”中选择刚刚设置的“vcpkg”。这样在“浏览”选项卡中就可以看到“vcpkg.H.Repos.vcpkg”。点击最右侧的“安装”。这样就可以集成到某个工程了。

在这里插入图片描述

3. 集成到cmake

CMake projects should use:
"-DCMAKE_TOOLCHAIN_FILE=E:/third-parties/vcpkg/scripts/buildsystems/vcpkg.cmake"

三、Vcpkg常见命令

1. 列出已经安装的开源库

.\vcpkg.exe list

2. 列出要更新的库

.\vcpkg.exe update

3. 更新所有过期的库

.\vcpkg.exe upgrade

4. 查看Vcpkg支持的开源库列表

.\vcpkg.exe search

5. 安装一个开源库

.\vcpkg.exe install jsoncpp

注意:install经历以下过程:

  • 环境初始化
  • 下载源代码(如果已经在cache中,则不会下载)
  • 校验文件有效性
  • 解压缩源代码
  • 利用配套工具配置源码工程,在这里是使用的是cmake(vcpkg会自动下载portable版本的cmake,下载慢,最好是下载最新版本的cmake)
  • 编译源码。一般会同时编译Release和Debug版本。
  • 把编译好的文件拷贝到相关目录中去(一般是installed目录)

6. 查看vcpkg支持的架构

.\vcpkg.exe help triplet

Available architecture triplets
VCPKG built-in triplets:
  arm-uwp
  arm64-windows
  x64-linux
  x64-osx
  x64-uwp
  x64-windows-static
  x64-windows
  x86-windows

VCPKG community triplets:
  arm-mingw
  arm-windows
  arm64-mingw
  arm64-uwp
  x64-mingw
  x64-osx-dynamic
  x64-windows-static-md
  x86-mingw
  x86-uwp
  x86-windows-static-md
  x86-windows-static

7. 安装时指定编译某种架构的程序库(默认编译成x86windows版本的库)

.\vcpkg.exe install jsoncpp

8. 移除安装的库

.\vcpkg.exe remove jsoncpp

9. 移除过时的库

.\vcpkg.exe remove --outdated

10. 导出包(会在.\vcpkg.exe所在目录生成jsoncpp.zip文件)

.\vcpkg.exe export jsoncpp:x86-windows --zip  --output=jsoncpp

11. 导入包

.\vcpkg.exe import jsoncpp.zip
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
vcpkg使用的无锁队列是一个基于 CAS (Compare and Swap) 操作的实现,它的实现位于 vcpkg 的 `include/vcpkg/fwdlock.h` 头文件中。 无锁队列的实现使用了 C++11 中的 `std::atomic` 类型,它支持原子操作,并且可以避免多线程访问时的竞争问题。在无锁队列中,每个节点包含一个数据项和一个指向下一个节点的指针,节点的插入和删除操作都是通过原子 CAS 操作来实现的。 无锁队列的代码示例: ```c++ template <typename T> class fwdlock { public: fwdlock() : head_(nullptr), tail_(nullptr) {} void push(T data) { node* n = new node(std::move(data)); node* t = tail_.load(std::memory_order_relaxed); do { n->next_ = t; } while (!tail_.compare_exchange_weak(t, n, std::memory_order_release, std::memory_order_relaxed)); } bool try_pop(T& data) { node* h = head_.load(std::memory_order_relaxed); node* t = tail_.load(std::memory_order_acquire); if (h == t) { return false; } node* next = h->next_; data = std::move(next->data_); head_.store(next, std::memory_order_release); delete h; return true; } private: struct node { T data_; node* next_; node(T data) : data_(std::move(data)), next_(nullptr) {} }; std::atomic<node*> head_; std::atomic<node*> tail_; }; ``` 在上述代码中,`fwdlock` 类实现了无锁队列的 push 和 try_pop 操作,其中 push 操作使用了 `compare_exchange_weak` 原子操作,try_pop 操作使用了 `load` 和 `store` 原子操作。使用无锁队列可以有效减少多线程并发访问时的竞争和锁等待,从而提高代码的性能和可伸缩性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值