Clion使用vcpkg管理C/C++包

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、Clion安装vcpkg
  • 二、使用步骤
    • 1.切换到清单模式
    • 2.开始安装包
  • 三、测试代码
  • 总结


前言

Linux上的库基本都可以通过aptyum等包管理工具来在线安装包,好用是真的好用,无独有偶,windows上也有类似的包管理工具,那就是今天的主角vcpkg,用好vcpkg可以省很多事。

vcpkg可以单独使用,也可以集成到IDE,今天就基于Clion讲解。


一、Clion安装vcpkg

Clion提供了一整套vcpkg的安装方法,可以说一气呵成。虽说vcpkg也可以单独使用,但是集成到ide无疑是最优解,它可以和很多ide集成,今天先介绍Clion。

前提条件:

本次演示需要预装VS2019,因为我的电脑上预装了VS2019导致vcpkg自动找到了VS2019的工具链,最终编译出来的库都是基于VS的,如果你使用MingW的工具链会导致无法链接的错误。

另外,需要在Clion里面配置VS2019的工具链:

在这里插入图片描述

如果你和我的环境很像,你可以继续往下;如果你没有预装VS2019你依然可以继续,我现在还不能确定是不是优先级的问题,只要引入vcpkg不报错就可以正常使用。

VS是我必然需要的环境,我不可能卸载或重配置它,所以有些东西无法验证。但是,只要你和我差不多环境,哪怕是VS2022你应该都是可以的。

首先、打开Clion

其次、依次找到View->Tool Windows->Vcpkg

在这里插入图片描述

这个时候底部工具栏就有Vcpkg了。
在这里插入图片描述

最后、点击底部工具栏上的vcpkg开始配置vcpkg。

在这里插入图片描述

接着,点击左上角的+添加repository,我这里提前拉取了github的存储库到gitee,大家可以克隆我的存储库,方便了不能访问github的同学。

Vcpkg国内存储库

按照我的配置添加:

在这里插入图片描述

Name:名称,最好英文,最好不要有空格
URL:替换成我给的国内存储库
Directory:安装目录,找一个空间足够的地方,谨慎放在C盘,因为需要源代码编译产生大量中间文件,占用大量的磁盘空间;最好不要有空格

Add vcpkg:建议勾上,创建一个空白项目,学习下Vcpkg是如何集成到项目中的

二、使用步骤

安装完成之后需要切换到Menifest Mode,就是清单模式,这个时候就可以开始管理包了。

1.切换到清单模式

如果你不在清单模式,点击右上角的{}切换到清单模式,如果已经在了,就不需要切换了。

在这里插入图片描述

2.开始安装包

进入清单模式后,你就可以看到右边有个列表,还有个搜索框,然后列表里分为Added(已经成功添加到项目)All(所有签名的包)
在这里插入图片描述

为了说清楚这个问题我们以boost为例:

搜索框输入boost,可以看到有了结果,说明找到了包:

在这里插入图片描述

这里注意下:我已经把boost-coroutine2添加到项目中了,所以可以看到Added列表里出现了boost-coroutine2,就不用重复添加了。

这里需要特别说明下:boost这个库比较特殊,它是分模块的,我这里说的分模块是真正意义上的分模块,指的是它可以在vcpkg里面单独管理每个模块,更准确地说分包比较合适。像ffmpeg虽然也分成avformat和avutil等模块,但是它不能在vcpkg里面单独安装,这一点还是需要注意下。

话说回来,就拿boost-coroutine2举例,我们都知道C++ STD真正开始支持协程是从C++20开始的,如果我们是基于C++17呢,我不想升级到C++20,我就可以通过使用boost来开发协程,这是很好的另辟蹊径的方法。

在这里插入图片描述

先搜索到我们需要的包boost-coroutine2,点击右边的Add to vcpkg.json,等待下载编译完成。当编译完成的时候它的库会安装到你的项目目录里面,比如cmake-build-debug\vcpkg_installed\x64-windows。接着会自动Reload Cmake配置,这个时候你需要去底部工具栏的Cmake条目里去找,它会告诉你怎么引用新安装的包。

在这里插入图片描述

注意:我测试过的包都提供了find_packages的方法,像ffmpeg本身是基于pfgconfig管理的,在unix上是不能直接使用find_packages找到的,但是,vcpkg可以!另外,像ffmpeg这样的包通过pkgconfig间接找到在vcpkg里面也是可以用的。

我不知道是不是所有的vcpkg包都提供了这个方法,但是我用过的都是有的。最终你还是按照vcpkg提供的引用方法最稳妥。

最后的最后,这个时候就可以开始写代码测试了。

注意:也有可能没有你要的包,vcpkg支持的包大概2000多个,平常使用足够了!

三、测试代码

boost-coroutine2为例,安装方式前面说过了,下面直接提供测试代码:

Boost.cpp

#include <iostream>
#include <boost/coroutine2/all.hpp>void int_generator(boost::coroutines2::coroutine<int>::push_type &yield) {for (int i = 1; i <= 5; ++i) {yield(i);}
}int main() {boost::coroutines2::coroutine<int>::pull_type source(int_generator);for (auto value: source) {std::cout << "Generated value: " << value << std::endl;}return 0;
}

CmakeLists.txt

cmake_minimum_required(VERSION 3.27)set(CMAKE_TOOLCHAIN_FILE D:/Work/vcpkg/scripts/buildsystems/vcpkg.cmake)project(Hello)set(CMAKE_CXX_STANDARD 17)find_package(boost_coroutine2 REQUIRED CONFIG)
add_executable(Boost Boost.cpp)
target_link_libraries(Boost PRIVATE Boost::coroutine2)

注意这句set(CMAKE_TOOLCHAIN_FILE D:/Work/vcpkg/scripts/buildsystems/vcpkg.cmake),必须在project()之前引入vcpkg,CMAKE_TOOLCHAIN_FILE的值就是我最开始说的安装目录。

注意:这个地方的路径要使用类Unix的正斜杠,不要使用Windows的反斜杠,仔细看我的写法!

编译+执行即可。


总结

1、总体我觉得是很好的,配置比apt麻烦点,但至少解决了缺乏包管理器的问题
2、像那些诞生于类Unix的包比如ffmpeg在windows上也可以直接使用了,如果自己编译的话麻烦不小。
3、vppkg不是万能的,比如opencv,如果你想添加自己的代码或自定义就行不通了,终究还是要自己动手。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/432338.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣 简单 876.链表的中间结点

文章目录 题目介绍题解 题目介绍 题解 法一&#xff1a; class Solution {public ListNode middleNode(ListNode head) {ListNode cur head;int n 0;while (cur ! null) {n;cur cur.next;}ListNode curr head;for (int i 0; i < n / 2; i) {curr curr.next;}return …

Unity对象池的高级写法 (Plus优化版)

唐老师关于对物体分类的OOD的写法确实十分好&#xff0c;代码也耦合度也低&#xff0c;但是我有个简单的写法同样能实现一样的效果&#xff0c;所以我就充分发挥了一下主观能动性 相较于基本功能&#xff0c;这一版做出了如下改动 1.限制了对象池最大数量&#xff0c;多出来的…

【hot100-java】【括号生成】

R9-回溯篇 枚举填左括号 class Solution {private int n;private char[] path;private final List<String> retnew ArrayList<>();public List<String> generateParenthesis(int n) {this.nn;//所有括号长度都是n*2pathnew char [n*2];dfs(0,0);return ret;…

求10 个整数中最大值

我们需要10个整数之中求出10个整数之中的最大值所以我们先要将10个整数先放置到一个容器之中&#xff0c;我们初期就使用数组的形式存放10个数组即设置数组arr[10]&#xff0c;我们要将10个数组之中的数字输出出来&#xff0c;我们这里使用的是遍历循环输出数组。我们这里是使用…

Redis 字符串类型的典型应用场景

目录 1. 缓存功能 2. 计数功能 3. 共享会话&#xff08;Session&#xff09; 4. 手机验证码 前言 这里将详细介绍 Redis 字符串类型在实际开发中的几个典型应用场景&#xff0c;并提供相应的伪代码示例。 1. 缓存功能 场景描述 在许多Web应用中&#xff0c;数据通常需要…

这6个aigc软件,性价比之王

随着人工智能技术的迅猛发展&#xff0c;越来越多的应用程序开始集成AIGC&#xff08;人工智能生成内容&#xff09;功能&#xff0c;提升用户体验。本文将介绍六款实用的AIGC软件下载&#xff0c;帮助您在各个领域提高工作效率&#xff0c;释放创造力。 1、即时 AI 作为国内…

Acwing Floyd算法

Acwing Floyd算法 Floyd-Warshall 算法&#xff0c;用于解决图中任意两点之间的最短路径问题。Floyd-Warshall 是一种 多源最短路径算法&#xff0c;可以处理带正权或负权的边&#xff0c;但要求图中不能有负权回路。 通过三层循环对每个顶点作为中转点 k 进行更新。通过检查…

企业为什么要上项目管理系统?项目管理的六大核心要素

随着企业规模的不断扩大和项目数量的增多&#xff0c;传统的手工管理方式已经无法满足企业在项目管理方面的需求。项目管理系统能够帮助企业实现项目信息的集中管理&#xff0c;将所有相关的项目信息&#xff08;如任务、进度、预算、人员等&#xff09;集中存储在一个平台上&a…

【STM32】 TCP/IP通信协议(1)

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

中国式报表制作困难?!那是因为你没选对报表工具!

一、报表工具介绍 在信息化时代&#xff0c;数据是企业决策的核心驱动力。报表工具作为数据处理与分析的重要手段&#xff0c;广泛应用于财务、销售、运营等各个领域&#xff0c;成为企业洞察市场、优化管理、提升效率的关键工具。传统上&#xff0c;报表制作依赖于复杂的编程…

AWS注册时常见错误处理

引言 创建AWS账号是使用AWS云服务的第一步&#xff0c;但在注册过程中可能会遇到一些常见的问题。本文中九河云将帮助您排查和解决在创建AWS账户时可能遇到的一些常见问题&#xff0c;包括未接到验证电话、最大失败尝试次数错误以及账户激活延迟等。 常见问题及解决方法 1. …

tensorflow底层架构

tensorflow底层架构 架构图 Training libraries 和 Inference libs&#xff08;训练库和推理库&#xff09; Training libraries&#xff1a;用于模型的训练过程&#xff0c;包括定义模型、计算梯度、更新模型权重等。这些库提供了在训练过程中所需的所有功能。Inference lib…

如何使用ArcGIS Pro制作地理区位图

你是否经常在网上看到别人制作的地理区位图&#xff0c;自己也跃跃欲试&#xff0c;这里为你分享一下制作方法&#xff0c;希望能对你有所帮助。 乡镇数据处理 将乡镇边界数据加载进来&#xff0c;打开符号系统&#xff0c;将所有的乡镇边界数据设置成一个颜色&#xff0c;如…

流浪软件uniaccess agent 删除

cmd的C盘找不到就用git rm -rf 之后&#xff0c;只剩下 俩文件夹删不掉 然后360软件就看到了&#xff0c;可惜卸载失败 然后360文件就找到了&#xff0c;彻底删除 再回git 查看 方法 https://blog.51cto.com/u_16099347/11352333 https://blog.csdn.net/xioayu96/article/…

9.25盒马鲜生一面

1.自我介绍 2.css两种盒子模型 ​3.rem和em 4.px概念 5.transition和animation的区别 6.移动端适配方案 7.vh、vw、% 8.js基本数据类型 9.call、apply、bind的区别 10.js实现继承的方法 11.get和post的区别 12.web安全&#xff08;XSS&#xff0c;CSRF&#xff09; …

Hadoop安装与配置

一、Hadoop安装与配置 1、解压Hadoop安装包 找到hadoop-2.6.0.tar.gz,将其复到master0节点的”/home/csu”目录内&#xff0c;解压hadoop [csumaster0 ~]$ tar -zxvf ~/hadoop-2.6.0.tar.gz 解压成成功后自动在csu目录下创建hadoop-2.6.0子目录&#xff0c;可以用cd hadoo…

Matlab simulink建模与仿真 第十九章(生成C代码)

一、Configuration Parameters模型参数配置 1、仿真时间 &#xff08;1&#xff09;在Solver选项卡中可以设置仿真的起始时间和结束时间&#xff0c;一般起始时间设为0&#xff0c;而结束时间按需设置。 &#xff08;2&#xff09;如果希望仿真不会自动暂停&#xff08;也就…

代码随想录算法训练营第55天 | 寻找存在的路径

寻找存在的路径 题目描述 给定一个包含 n 个节点的无向图中&#xff0c;节点编号从 1 到 n &#xff08;含 1 和 n &#xff09;。 你的任务是判断是否有一条从节点 source 出发到节点 destination 的路径存在。 输入描述 第一行包含两个正整数 N 和 M&#xff0c;N 代表节点…

音视频入门基础:AAC专题(9)——FFmpeg源码中计算AAC裸流每个packet的duration和duration_time的实现

音视频入门基础&#xff1a;AAC专题系列文章&#xff1a; 音视频入门基础&#xff1a;AAC专题&#xff08;1&#xff09;——AAC官方文档下载 音视频入门基础&#xff1a;AAC专题&#xff08;2&#xff09;——使用FFmpeg命令生成AAC裸流文件 音视频入门基础&#xff1a;AAC…