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

news2024/9/22 18:16:27

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

文章目录

  • 前言
  • 一、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.coloradmin.cn/o/2155618.html

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

相关文章

cgroup基本原理与使用

Linux cgroups是Linux内核中的一项强大功能&#xff0c;允许用户对进程进行**资源限制、优先级控制、监控和隔离。它主要用于管理和控制计算资源的分配&#xff0c;特别是在容器技术&#xff08;如 Docker 和 LXC&#xff09;中得到了广泛应用。 1. Cgroups的基本概念和原理 …

Qwen-2.5 + ClaudeDev + Aider:这套免费的AI编程工具链,简直太棒了!

Qwen-2.5 ClaudeDev Aider&#xff1a;这套免费的AI编程工具链&#xff0c;简直太棒了&#xff01; 原创 Aitrainee AI进修生 &#x1f379; Insight Daily &#x1faba; Aitrainee | 公众号&#xff1a;AI进修生 Hi&#xff0c;这里是Aitrainee&#xff0c;欢迎阅读本…

AI字幕翻译器行业分析:前五大厂商占有大约29.5%的市场份额

AI 字幕翻译器正在彻底改变我们使用不同语言消费媒体的方式&#xff0c;使内容可以普遍访问。这些先进的技术利用机器学习和自然语言处理&#xff0c;将口语对话实时翻译成字幕。这一功能不仅打破了语言障碍&#xff0c;提升了观众的体验&#xff0c;而且还使内容创作者能够毫不…

比 Kimi 更强!用 Claude 仿写头条文章,轻松过原创(附完整指令)

最近&#xff0c;我有个做头条号的朋友跟我吐槽&#xff0c;说每天都要更新内容&#xff0c;经常写文章写到半夜&#xff0c;他已经快撑不住了。我听完实在有点不忍心&#xff0c;就告诉他&#xff0c;其实可以用 AI 来帮忙写头条文章。 朋友一脸怀疑&#xff0c;说“怎么可能&…

消灭病毒gamedemo

DestoryVirus 一、AudioSourceManager using System.Collections; using System.Collections.Generic; using UnityEngine;public class AudioSourceManager : MonoBehaviour {public static AudioSourceManager Instance { get; private set; }public SoundPlayer soundPla…

【C++】智能指针模拟实现及详解

目录 什么是智能指针&#xff1a; 为什么要有智能指针&#xff1a; auto_ptr: unique_ptr&#xff1a; shared_ptr&#xff1a; shared_ptr的缺陷&#xff1a; weak_ptr: 什么是智能指针&#xff1a; 概念&#xff1a; 智能指针是一种特殊的类模板&#xff0c;用于自动…

Java律师法律咨询小程序

技术&#xff1a;Java、Springboot、mybatis、Vue、Mysql、微信小程序 1.代码干净整洁&#xff0c;可以快速二次开发和添加新功能 2.亮点可以添加AI法律咨询作为 创新点 系统分&#xff1a;用户小程序端&#xff0c;律师web端和管理员端 用户可以在小程序端登录系统进入首…

机器学习之非监督学习(二)异常检测(基于高斯概率密度)

机器学习之非监督学习&#xff08;二&#xff09;异常检测&#xff08;基于高斯概率密度&#xff09; 0. 文章传送1.案例引入2.高斯正态分布3.异常检测算法4.异常检测 vs 监督学习5.算法优化 0. 文章传送 机器学习之监督学习&#xff08;一&#xff09;线性回归、多项式回归、…

VMware安装CentOS7及其初始化配置教程

安装准备 VMware Workstation Pro 17&#xff1a;下载及安装教程 CentOS 7下载地址&#xff1a;centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云 创建虚拟机 安装CentOS7 鼠标点一下屏幕中间&#xff0c;就可以进入虚拟机&#xff0c;按向上箭头选择安装&#xff0…

EECS498 Deep Learning for Computer Vision (一)软件使用指南

#最近开始学习深度学习的相关基础知识&#xff0c;记录一下相关笔记及学习成果# learning&#xff1a;building artificial systems that learn from data and experience deep learning(a set of machine learning): hierarchical learning algorithms with many "laye…

【基础算法总结】模拟篇

目录 一&#xff0c;算法介绍二&#xff0c;算法原理和代码实现1576.替换所有的问号495.提莫攻击6.Z字形变换38.外观数列1419.数青蛙 三&#xff0c;算法总结 一&#xff0c;算法介绍 模拟算法本质就是"依葫芦画瓢"&#xff0c;就是在题目中已经告诉了我们该如何操作…

helm安装promethues

1、添加 Helm 仓库&#xff1a; helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update 2、安装 Prometheus&#xff1a;安装promtheus到monitor名称空间中 kubectl create ns monitor helm search repo prometheus #查…

【WSL迁移】将WSL2迁移到D盘

首先查看WSL状态&#xff1a;wsl -l -v 以压缩包的形式导出到其他盘。 wsl --export Ubuntu D:\Ubuntu_WSL\ubuntu.tar 注销原有的linux系统 wsl --unregister Ubuntu 导入系统到D盘 wsl --import Ubuntu D:\Ubuntu_WSL D:\Ubuntu_WSL\Ubuntu.tar 恢复默认用户 Ubuntu co…

Python编码系列—Python策略模式:灵活应对变化的算法策略

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…

后端-navicat查找语句(单表与多表)

表格字段设置如图 语句&#xff1a; 1.输出 1.输出name和age列 SELECT name,age from student 1.2.全部输出 select * from student 2.where子语句 1.运算符&#xff1a; 等于 >大于 >大于等于 <小于 <小于等于 ! <>不等于 select * from stude…

大学生必看!60万人在用的GPT4o大学数学智能体有多牛

❤️作者主页&#xff1a;小虚竹 ❤️作者简介&#xff1a;大家好,我是小虚竹。2022年度博客之星&#x1f3c6;&#xff0c;Java领域优质创作者&#x1f3c6;&#xff0c;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;掘金年度人气作者&#x1…

Spring框架总体结构

1. Spring是什么 Spring 是一个开源框架 Spring 为简化企业级应用开发而生&#xff0c;使用 Spring 可以使简单的 JavaBean实现以前只有 EJB 才能实现的功能 Spring 是一个 IOC(DI) 和 AOP 容器框架 具体描述 Spring 轻量级&#xff1a;Spring 是非侵入性的 - 基于 Spring 开发…

【24华为杯数模研赛赛题思路已出】国赛B题思路丨附参考代码丨免费分享

2024年华为杯研赛B题解题思路 B题 WLAN组网中网络吞吐量建模 问题1 请根据附件WLAN网络实测训练集中所提供的网络拓扑、业务流量、门限、节点间RSSI的测试基本信息&#xff0c;分析其中各参数对AP发送机会的影响&#xff0c;并给出影响性强弱的顺序。通过训练的模型&#xff…

撤销与恢复的奥秘:设计模式之备忘录模式详解

备忘录模式 &#x1f3af; 备忘录模式&#xff08;Memento Pattern&#xff09;简介 备忘录模式 是一种行为型设计模式&#xff0c;用于保存对象的某一时刻状态&#xff0c;以便稍后可以恢复到该状态&#xff0c;而不破坏对象的封装性。备忘录模式将对象的状态封装在一个独立的…

技术周总结 09.16~09.22 周日(架构 C# 数据库)

文章目录 一、09.16 周一1.1&#xff09;问题01&#xff1a; 软件质量属性中"质量属性场景"、"质量属性环境分析"、"质量属性效用树"、"质量属性需求用例分析"分别是什么&#xff1f;1.2&#xff09;问题02&#xff1a; 软件质量属性中…