使用vcpkg与json文件自动安装项目依赖库

说明

本文记录自己使用vcpkg.json文件自动安装依赖库并完成编译的全过程。

关于vcpkg是什么这里就不多详细解释,可以看一下专门的介绍及安装的文章,总之了解这是一个C++的包管理工具就可以了。

流程

下面介绍从GitHub上克隆C++项目以及为这个项目安装所需依赖项,并完成编译的全过程。

1 拉取项目

在GitHub上找到你想要克隆的项目,复制地址。

在这里插入图片描述

得到地址后,在你想要复制项目的文件夹中右击,选"open git bash here"
输入git clone + 复制的地址
等待项目克隆完成
在这里插入图片描述

2 编辑vcpkg.json文件

这一步的前提是电脑上已经安装了vcpkg,并将它的路径同步到了环境变量中,记住这个环境变量的名称,在编写CMakeLists文件时要用,如图
在这里插入图片描述
没有安装的话需要找教程安装一下。
然后根据该项目在README中所描述的依赖项编写vcpkg.json
依赖项
编写vcpkg.json文件

{
    "name": "electric-inspection-backend",
    "version-string": "0.0.1",
    "dependencies": [
      "boost",
      "cgal",
      "lastools",
      "spdlog",
      "cxxopts",
      "tbb",
      "jsoncpp",
      "shapelib",
      "eigen3",
      "glm",
      "gmp",
      "mpfr",
      "ceres",
      "libpng",
      "libjpeg-turbo",
      "tiff",
      "glew",
      "glad",
      "glfw3"
    ]
  }
  
  • name:项目的名称,标识这个 vcpkg.json 文件所描述的项目。无需在意,这个的作用只是为了写编译过程中的日志文件。
  • version-string:项目版本号,取决于自己,可直接复制。
  • dependencies:依赖库列表

这里安装的库明显比要求的多,这是因为有些库并没有在README中写明。不过你在后续使用cmake构建时,会提醒你却库,在这里再添加就好。

3 修改CMakeLists文件

此时需要修改项目根目录下的CMakeLists.txt文件,使其能够连接到vcpkg,自动识别vcpkg.json文件,并开始安装依赖库。

在这里插入图片描述
注意,vcpkg相关配置代码必须在project之前,否则无法自动识别vcpkg.json文件,可从下面复制

# vcpkg配置,必须位于project之前
if(DEFINED ENV{VCPKG_ROOT})
  set(VCPKG_ROOT "$ENV{VCPKG_ROOT}" CACHE PATH "") # 从环境变量中读取vcpkg根目录
else()
  set(VCPKG_ROOT "E:/vcpkg_clone" CACHE PATH "") # 手动设置vcpkg根目录
endif()

message("set VCPKG_ROOT: ${VCPKG_ROOT}")
set(VCPKG_FEATURE_FLAGS "version") # 用于支持自定义依赖版本
set(CMAKE_TOOLCHAIN_FILE "${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake") # 设置vcpkg工具链

构建项目

接下来就可以开始使用cmake指令来构建项目,指令可参照该项目在GitHub上给定的指令顺序
在这里插入图片描述
摁住shift右击,打开PowerShell窗口,输入命令,开始安装
在这里插入图片描述
安装完成
在这里插入图片描述

这时可以看到build文件夹中多出了 vcpkg_installed 文件,这就是该项目依赖项的安装位置。

在这里插入图片描述
然后启动解决方案,运行就可以了。

注意:之后可能代码中还会出现错误,但是这与依赖项安装就没关系了。我这里就出现了一些代码上的错误,查资料改一下就可以运行了。

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

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

相关文章

python文件操作常用方法(读写txt、xlsx、CSV、和json文件)

引言 用代码做分析的时候经常需要保存中间成果,保存文件格式各不相同,在这里好好总结一下关于python文件操作的方法和注意事项 Python 提供了丰富的文件操作功能,允许我们创建、读取、更新和删除文件。允许程序与外部世界进行交互。 文章目录…

冯喜运:5.15黄金原油晚盘分析:鲍威尔再放鹰,降息悬念重重

【黄金消息面分析】:在全球经济动荡和通胀预期不断上升的背景下,黄金作为传统的避险资产,再次成为投资者关注的焦点。当前,黄金价格交投于2370美元/盎司左右,连续两日日线呈现上涨趋势,而白银价格也在连续三…

二进制搭建k8s

实验环境: k8s集群master01:192.168.1.11 k8s集群master02:192.168.1.22 master虚拟ip:192.168.1.100 k8s集群node01:192.168.1.33 k8s集群node01:192.168.1.44 nginxkeepalive01(master):192.168.1.55 nginxkeepalive02&a…

困惑点记录

【第十章 总结思考】CIM之我见 - 知乎

Java开发大厂面试第03讲:线程的状态有哪些?它是如何工作的?

线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在。一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源、更加轻量化&#xff0…

C++11 新特性 常量表达式 constexpr

为了解决常量无法确定的问题,C11在新标准中提出了关键字constexpr,它能够有效地定义常量表达式,并且达到类型安全、可移植、方便库和嵌入式系统开发的目的。 一、常量的不确定性 在C11标准以前,我们没有一种方法能够有效地要求一…

短视频矩阵系统/源码----可视化剪辑技术独家开发

现阶段市面上大多矩阵软件都非常程序化且需要使用者具有较强的逻辑思维能力或剪辑经验,这使得一些个人、团队、企业在使用时无形中增加了学习成本,剪辑出来的效果大多不尽如人意,发出来的视频没有流量,根本达不到预期效果。 如何提…

汽车工厂安灯系统能够快速知晓生产现场的状况

汽车工厂是一个庞大的生产系统,其中有数以百计的工人、机器和设备在不断运转,以确保汽车的生产顺利进行。在如此复杂的生产环境中,安全是至关重要的,而安灯系统正是一个能够帮助汽车工厂快速知晓生产现场状况的重要工具。 安灯系统…

海外云手机的运作原理和适用场景

海外云手机是一种基于云计算技术的虚拟手机服务,通过将手机操作系统和应用程序托管在远程服务器上,实现用户可以通过互联网连接来使用和管理手机功能,而无需实际拥有物理手机。以下是有关海外云手机的相关信息: 海外云手机的运作原…

HCIP【Hybird实验】

目录 一、实验拓扑图: 二、实验要求: 三、实验思路: 四、实验过程: 1、配置PC的IP地址(不用配置网关,这个拓扑图没有使用到三层设备) 2、交换机配置 3、PC间进行测试: 一、实…

大模型来了,创业者怎么做出好产品?

大模型的问世惊艳了人们的目光,打开了对AI想象力——生成未来,是谁的未来? “电的发明并不是只能让爱迪生的公司成为全球最大公司,而是为众多电器制造商也提供了巨大的商机。从人类科技史的角度来看,应用层面的价值往…

基于国产LoRa的智慧农业解决方案--ASR6601、SX1278

我国《数字乡村发展战略纲要》明确指出“要推进农业数字化转型”,加快推广云计算、大数据、物联网、人工智能在农业生产经营管理中的运用。 然而,目前我国的农业数字化转型还面临着诸多挑战。我国整体农业机械化程度和自动化控制水平仍然较低。由于农田面…

[图解]EA从数据库逆向得到分析类模型-01

1 00:00:00,840 --> 00:00:02,400 今天,我们来说一下 2 00:00:02,670 --> 00:00:06,320 一个最近几天不止一个同学问的问题 3 00:00:06,490 --> 00:00:11,410 就是说,怎样把一个数据库 4 00:00:13,740 --> 00:00:16,720 转到分析类图 5 …

so-vits-svc:AI翻唱,语音克隆

前言 这个项目是为了让开发者最喜欢的动画角色唱歌而开发的,任何涉及真人的东西都与开发者的意图背道而驰。 项目地址:https://github.com/svc-develop-team/so-vits-svc/blob/4.1-Stable/README_zh_CN.md 安装 可以自行配置,应该也不难 …

Python中合并多个CSV数据集的技术实践

目录 一、引言 二、准备工作 三、读取CSV文件 四、数据预处理 五、合并数据集 六、错误处理与调试 七、案例分析 八、总结 一、引言 在数据处理和分析的过程中,我们经常需要处理多个CSV(逗号分隔值)文件,并将它们合并…

如何快速将视频做成二维码?扫描二维码播放视频的制作方法

视频二维码的用途越来越多,比如常见的有产品展示、企业宣传、教程说明、个人展示等都可以生成二维码,通过扫码在手机或者其他设备上预览内容,从而提升其他人获取视频的速度,实现内容的快速分享。 对于有制作视频二维码需求的小伙…

Java面试八股之Collection和Collections的区别

Java中Collection和Collections的区别 Collection 是一个接口,位于 java.util 包中,它是 Java 集合框架的顶层接口之一,代表了一组对象的集合。Collection 接口定义了所有集合类型(如 List、Set、Queue 等)所共有的基…

深度解析 Spring 源码:解密AOP切点和通知的实现机制

文章目录 深度解析 Spring 源码:解密AOP切点和通知的实现机制一、Spring AOP的基础知识1.1 AOP的核心概念:切点、通知、切面等1.2 Spring AOP与传统AOP的区别和优势 二、深入分析切点和通知的实现2.1 研究 Pointcut 接口及其实现类2.1.1 Pointcut 接口2.…

java springboot连接sqlserver使用

pom.xml增加sqlserver驱动 <dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>9.4.0.jre8</version></dependency>application.yml配置文件 server:port: 9001 #spring: …

了解 Robot Framework :接口自动化测试教程!

开源自动化测试利器&#xff1a;Robot Framework Robot Framework 是一个用于实现自动化测试和机器人流程自动化&#xff08;RPA&#xff09;的开放源代码框架。它由一个名为 Robot Framework Foundation 的组织得到推广&#xff0c;得到了多家领军企业在软件开发中的广泛应用。…