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.mfbz.cn/a/883269.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

mariadb实现冷备份与恢复操作案例(物理冷备份,周期性备份)详解

文章目录 前置环境一、物理冷备份1.备份2.恢复检查结果 补充&#xff1a; 周期性恢复操作 前置环境 主机ipmariadb1192.168.10.11mariadb2192.168.10.12 mairadb1操作 安装mariadb yum -y install mariadb-server启动mariadb systemctl start mariadb这里只是演示备份与恢复…

cefsharp新版本OnBeforeResourceLoad 禁止http自动跳转https显示404错误解决办法 含代码

一、问题 因项目需要,域名没有ssl证书,结果http访问时被强制定向到https前缀,结果会显示404 测试版本cefsharp126.x (x64) 框架 CefSharp.WinForms.NETCore 二、代码(核心代码) 如果请求url是http,且目标是https时,则阻止请求 //判断请求变化 if (url.StartsWith(<…

初试Bootstrap前端框架

文章目录 一、Bootstrap概述二、Bootstrap实例1、创建网页2、编写代码3、代码说明4、浏览网页&#xff0c;查看结果5、登录按钮事件处理6、浏览网页&#xff0c;查看结果 三、实战小结 一、Bootstrap概述 大家好&#xff0c;今天我们将一起学习一个非常流行的前端框架——Boot…

Error: one input ui-file must be specified(问题已解决)

一、 项目场景问题描述 Error: one input ui-file must be specified pycharm IDE添加了外部工具。 QT Designer设计完成&#xff0c;生成界面ui文件&#xff0c; 3.运行pyuic5转换文件 方式一&#xff1a;选中ui文件 方式二:右击选中.ui文件。 报错&#xff1a;Error: o…

SpringCloud Alibaba五大组件之——Sentinel

SpringCloud Alibaba五大组件之——Sentinel&#xff08;文末附有完整项目GitHub链接&#xff09; 前言一、什么是Sentinel二、Sentinel控制台1.下载jar包2.自己打包3.启动控制台4.浏览器访问 三、项目中引入Sentinel1.在api-service模块的pom文件引入依赖&#xff1a;2.applic…

<Java>String类型变量的使用

两边有一个string就是连接&#xff0c;否则做加法 ‘ ’是char&#xff0c;“ ”是string&#xff0c;char能做加法&#xff0c;string只能连接

R包:ggheatmap热图

加载R包 # devtools::install_github("XiaoLuo-boy/ggheatmap")library(ggheatmap) library(tidyr)数据 set.seed(123) df <- matrix(runif(225,0,10),ncol 15) colnames(df) <- paste("sample",1:15,sep "") rownames(df) <- sapp…

NLP技术在营业选址中的实践与探索

传统营业选址面临的问题 在电信业务的服务流程中&#xff0c;用户装机地址的准确性和清晰度对于整个服务体验和运营效率起着至关重要的作用。然而&#xff0c;在实际操作中&#xff0c;装机地址的确定往往面临诸多挑战&#xff0c;这些问题不仅影响用户的服务体验&#xff0c;也…

wireshark使用要点

目录 IP过滤 端口过滤 内容过滤 过滤udp 过滤tcp IP过滤 ip.src XXX.XXX.XXX.XXX 只显示消息源地址为XXX.XXX.XXX.XXX的信息 ip.dst XXX.XXX.XXX.XXX 只显示消息目的地址为XXX.XXX.XXX.XXX的信息 ip.addr XXX.XXX.XXX.XXX显示消息源地址为XXX.XXX.XXX.XXX&#xff0…

通过 OBD Demo 体验 OceanBase 4.3 社区版

本文作者&#xff1a;马顺华 引言 OceanBase 4.3 是一个专为实时分析 AP 业务设计的重大更新版本。它基于LSM-Tree架构&#xff0c;引入了列存引擎&#xff0c;实现了行存与列存数据存储的无缝整合。这一版本不仅显著提升了AP场景的查询性能&#xff0c;同时也确保了TP业务场景…

抽象类、比较器和接口

一.抽象类 1.抽象类的概念&#xff1a;如果一个类中没有包含足够的信息来描述一个具体的对象&#xff0c;这样的类就是抽象类。&#xff08;图例说明&#xff1a;&#xff09; 2.抽象方法的概念&#xff1a;当一个方法被abstract来修饰&#xff0c;此时代表着这个方法可以不进…

leetcode-189:轮转数组

给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 解释: 向右轮转 1 步: [7,1,2,3,4,5,6] 向右轮转 2 步: [6,7,1,2,3,4,5] 向右轮转 3 步: [5,6,7,1,2,3,4…

毕业设计选题:基于ssm+vue+uniapp的自助购药小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

828华为云征文|使用Flexus X实例集成ES搜索引擎

目录 一、应用场景 1.1 Flexus X实例概述 1.2 ES搜索引擎 二、安装相关服务 2.1 安装Elasticsearch7.17.0 2.2 安装kibana7.17.0 三、开通安全组规则 四、整体感受 4.1 Flexus X实例 4.2 使用感觉 一、应用场景 1.1 Flexus X实例概述 Flexus X实例是华为云推出的一款…

Cisco Packet Tracer的安装加汉化

这个工具学计算机网络的同学会用到 1.下载安装 网盘链接&#xff1a;https://pan.baidu.com/s/1CmnxAD9MkCtE7pc8Tjw0IA 提取码&#xff1a;frkb 点击第一个进行安装&#xff0c;按步骤来即可。 2.汉化 &#xff08;1&#xff09;复制chinese.ptl文件 &#xff08;2&…

Redisson分布式锁的概念和使用

Redisson分布式锁的概念和使用 一 简介1.1 什么是分布式锁&#xff1f;1.2 Redisson分布式锁的原理1.3 Redisson分布式锁的优势1.4 Redisson分布式锁的应用场景 二 案例2.1 锁竞争案例2.2 看门狗案例2.3 参考文章 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff…

如何在 macOS 上恢复未保存的 Excel 文件 – 文件恢复的最佳方法

Microsoft Excel 主要用于学生、员工和组织创建电子表格、报告和许多其他内容。我们是人&#xff0c;我们也容易忘记事情。因此&#xff0c;您想要在 macOS 上恢复未保存的 Excel 文件并不罕见。 虽然在 Excel 上恢复未保存的电子表格很容易&#xff0c;但在 macOS 上就有些棘…

AWS注册时常见错误处理

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

VSCode编程配置再次总结

VScode 中C++编程再次总结 0.简介 1.配置总结 1.1 launch jsion文件 launch.json文件主要用于运行和调试的配置,具有程序启动调试功能。launch.json文件会启用tasks.json的任务,并能实现调试功能。 左侧任务栏的第四个选项运行和调试,点击创建launch.json {"conf…

String类常用的方法

源代码&#xff1a; 输出结果&#xff1a;