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.xdnf.cn/news/147718.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C语言深入理解指针(四)

目录 字符指针变量数组指针变量数组指针变量是什么数组指针变量怎么初始化 二维数组传参的本质函数指针变量函数指针变量的创建函数指针变量的使用代码typedef关键字 函数指针数组转移表 字符指针变量 字符指针在之前我们有提到过&#xff0c;&#xff08;字符&#xff09;&am…

NLP 文本分类核心问题

解决思路 分解为多个独立二分类任务将多标签分类转化为多分类问题更换 loss 直接由模型进行多标签分类 数据稀疏问题 标注更多数据&#xff0c;核心解决方案&#xff1a; 自己构造训练样本 数据增强&#xff0c;如使用 chatGPT 来构造数据更换模型 减少数据需求增加规则弥补…

MELON的难题- 华为OD统一考试(E卷)

2024华为OD机试&#xff08;C卷D卷&#xff09;最新题库【超值优惠】Java/Python/C合集 题目描述 MELON 有一堆精美的雨花石&#xff08;数量为 n&#xff0c;重量各异&#xff09;&#xff0c;准备送给 S和 W&#xff0c;MELON 希望送给俩人的雨花石重量是一致的。请你设计一…

爬虫 ----hook

目录 定义&#xff1a; 了解什么是hook? 举例 hook XHR请求 XMLHttpRequest 案例地址&#xff1a; Interceptors-拦截器 HOOK cookie操作 cookie 示范 常见的hook代码总结 1.Hook Cookie 2.Hook Header 3.Hook URL 4.Hook JSON.stringify 5.Hook JSON.parse 6.Ho…

Mac使用gradle编译springboot-2.7.x源码

1 开发环境&#xff1a; JDK8 ideaIU-2024.2.2 gradle-7.6.3 代理网络 2 下载springboot源码 代码仓库网址 git clone -b 2.7.x https://github.com/spring-projects/spring-boot.git3 安装gradle gradle下载网址 https://services.gradle.org/distributions/ 安装此文件指…

C语言 | Leetcode C语言题解之第415题字符串相加

题目&#xff1a; 题解&#xff1a; char* addStrings(char* num1, char* num2) {int i strlen(num1) - 1, j strlen(num2) - 1, add 0;char* ans (char*)malloc(sizeof(char) * (fmax(i, j) 3));int len 0;while (i > 0 || j > 0 || add ! 0) {int x i > 0 ?…

lsof可以查看当前系统中正在被使用的文件,包括动态库

lsof的英文是 list open files lsof直接回车&#xff0c;会显示很多&#xff0c;可以配合more命令查看 lsof | more -10 sudo lsof | more -20 lsof查看正在使用某个动态库的进程 lsof /lib/x86_64-linux-gnu/libc.so.6 lsof /usr/lib/x86_64-linux-gnu/libc.so.6 l…

如何优化苹果CMS 泛目录的缓存管理?

在使用苹果CMS进行内容管理时&#xff0c;缓存管理是提升网站性能的重要环节。随着技术的不断发展&#xff0c;泛目录插件的缓存机制也逐渐变得不再必要。&#xff08;maccmscn&#xff09;本文将探讨如何在不使用缓存的情况下&#xff0c;优化苹果CMS泛目录的性能&#xff0c;…

(学习记录)使用 STM32CubeMX——配置时钟(入门)

使用STM32CubeMX配置STM32F103C8T6时钟部分 选择芯片 ①&#xff1a;选择MCU型号 ①&#xff1a;这里使用英文输入法&#xff0c;输入你想要的芯片型号&#xff0c;我这里采用STM32F103C8T6 ②&#xff1a;这里能看到搜索后出来的芯片具体型号&#xff0c;选择匹配度最高的一个…

MySQL-排名函数ROW_NUMBER(),RANK(),DENSE_RANK()函数的异同

MySQL-排名函数ROW_NUMBER()&#xff0c;RANK()&#xff0c;DENSE_RANK()函数的异同 前言 假设有如下表结构与数据&#xff0c;class_id表示班级&#xff0c;需求&#xff1a;现在要按照班级分组&#xff0c;每个班级的学生进行年龄从小到大排序 一、ROW_NUMBER()函数 ROW_NUM…

Linux中的调度算法

nice值的范围有限&#xff0c;即为[-20, 19]&#xff0c;也就是40个数字&#xff0c;优先级为[60, 99]即一共40个优先级 目前谈论的Linux操作系统叫做分时操作系统&#xff0c;调度的时候主要强调公平&#xff0c;还有一种是实时操作系统&#xff0c;比如智能汽车里面必须装有这…

【面经】查找中常见的树数据结构

查找中常见的树数据结构 一、二叉排序&#xff08;搜索、查找&#xff09;树&#xff08;BST&#xff0c;Binary Search Tree&#xff09;&#xff08;1&#xff09;二叉排序树的查找、插入和删除过程&#xff08;2&#xff09;叉树排序树的缺陷&#xff08;3&#xff09;二叉排…

Spark原理及调优

spark官档 hints&#xff1a;https://spark.apache.org/docs/3.0.0/sql-ref-syntax-qry-select-hints.html调优参数&#xff1a;https://spark.apache.org/docs/latest/sql-performance-tuning.html#join-strategy-hints-for-sql-queries作者几乎把所有的RDD API查了个遍&…

【服务器入门】Linux系统基础知识

【服务器入门】Linux系统基础知识 远程登录与文件传输基础命令与文本编辑vi/vim使用shell脚本基本命令1、目录操作2、文件创建与删改3、文件连接与查看 参考 目前超算使用的系统以Linux系统为主&#xff0c;肯定需要了解一些相关知识。本博客就以本人运行WRF模型所需&#xff0…

7-50 畅通工程之局部最小花费问题 (kruskal)

输入样例: 4 1 2 1 1 1 3 4 0 1 4 1 1 2 3 3 0 2 4 2 1 3 4 5 0输出样例: 3 代码&#xff1a; #include<iostream> #include<queue> using namespace std; const int N110; struct node{int x,y,w;bool operator <(const node &n1)const{if(wn1.w) retur…

提升编程效率的秘诀:多数人竟然忽略了它!

在编程学习的过程中&#xff0c;许多人会专注于算法、数据结构、编程语言的学习&#xff0c;而往往忽略了一个至关重要的基础技能——键盘盲打。虽然看似与编程能力无关&#xff0c;但盲打不仅可以显著提高编程效率&#xff0c;还能帮助编程者更好地集中注意力。本文将深入探讨…

数字图像面积计算一般方法及MATLAB实现

一、引言 在数字图像处理中&#xff0c;经常需要获取感兴趣区域的面积属性&#xff0c;下面给出图像处理的一般步骤。 1.读入的彩色图像 2.将彩色图像转化为灰度图像 3.灰度图像转化为二值图像 4.区域标记 5.对每个区域的面积进行计算和显示 二、程序代码 %面积计算 cle…

加密视频播放器 EncodedPlayer V3.1使用说明

使用说明 加密视频播放器 EncodedPlayer可对视频发布者提供的特定加密视频进行播放&#xff0c;以达到保护视频内容不被未经授权的用户访问或盗版的目的。 点击【打开】可选择格式为.Apol的加密视频文件并进行播放。为防止视频翻录&#xff0c;播放器会在视频中添加当前用户…

银河麒麟操作系统重装后重新激活是否会额外消耗一个激活码?

银河麒麟操作系统重装后重新激活是否会额外消耗一个激活码&#xff1f; 1、激活码会额外消耗吗&#xff1f;2、重装后如何重新激活&#xff1f;3、注意事项4 总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟操作系统时&a…

解释器模式:将语法规则与执行逻辑解耦

解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它提供了评估语言的语法或表达式的方式。该模式通过定义一个语言的文法表示&#xff0c;并通过解释这些表示来执行相应的操作。 解释器模式主要用于设计一种特定类型的计算机语言或表达式…