【C++】windows11环境包管理工具vcpkg配置和教程

news2024/9/29 11:39:19

【C++】windows11环境包管理工具vcpkg配置和教程

文章目录

  • 【C++】windows11环境包管理工具vcpkg配置和教程
  • vcpkg 概述
  • Vckpg 下载和安装
  • 先决条件
    • 下载安装
  • 初识vcpkg:新建helloworld项目
  • 集成到 Visual Studio
    • 全局集成和移除
    • 集成到项目
  • 总结


vcpkg 概述

开源库绝大部分都来源于 Linux 系统、将其移植到 Windows 的 VC 开发环境下编译比较复杂和麻烦,因此 vcpkg 于 2016 年推出,最初由微软开发,并开源在 GitHub 上,可帮助开发人员将项目迁移到较新版本的 Visual Studio。 vcpkg 是 Microsoft 和 C++ 社区维护的免费开放源代码 C/C++ 包管理器,用于简化第三方库的获取、构建和管理过程,现在已演变成 Windows、macOS 和 Linux 上开发人员使用的跨平台工具。 vcpkg 拥有大量开放源代码库注册表和企业就绪功能,旨在通过支持任何构建和项目系统来促进开发过程。

Vckpg 下载和安装

先决条件

  1. C++ 编译器:对于 Windows ,Visual Studio 的 MSVC(Microsoft Visual C++ 编译器)是 C++ 开发所需的编译器。
  2. CMake:CMake是一个开源的跨平台构建工具,用于管理软件项目的构建过程,它使用简单的配置文件(来描述项目的构建规则,然后根据这些规则生成适用于不同平台和编译器的构建脚本或项目文件。
  3. Git:为 Windows 用户提供了 Git 的核心工具集,并且模拟了一个类 Unix 的环境,能够在类 Unix 的环境中使用 Git 和其他命令行工具。

下载安装

  1. GitHub 克隆 vcpkg 存储库:存储库包含用于获取
    vcpkg 可执行文件的脚本,以及由 vcpkg 社区维护的特选开放源代码库的注册表。
    # 在合适的路径下拷贝vcpkg 库
    git clone https://github.com/microsoft/vcpkg.git
    
  2. 运行启动脚本:设置 vcpkg 的工作环境,包括构建必要的工具和配置文件。
    cd vcpkg && bootstrap-vcpkg.bat
    

初识vcpkg:新建helloworld项目

1.配置 VCPKG_ROOT 环境变量

# 设置 VCPKG_ROOT 告知操作系统 vcpkg 的根目录(自己的安装路径)
set "VCPKG_ROOT=D:\ProgramData\vcpkg"
# 将 vcpkg 的根目录添加到系统的 PATH 环境变量
set PATH=%VCPKG_ROOT%;%PATH%

上述方式设置环境变量只会影响当前终端会话,若要在所有会话中永久更改存在,需要在“Windows 系统环境变量”上进行设置。

2.创建项目目录

# 创建helloworld文件夹并进去文件夹目录下
mkdir helloworld && cd helloworld

3.添加依赖项和项目文件

# 创建清单文件
vcpkg new --application

注意:有python基础的都或多或少了解annaconda,vcpkg与anaconda的作用类似,vcpkg清单的作用类似于annaconda的虚拟环境,每个清单之间是互相独立的。

–application:这个标志告知 vcpkg 创建一个应用程序项目,而不是库项目。项目模板更适合包含主程序的应用程序。

vcpkg.json:用于定义项目的 vcpkg 配置,包括依赖库的版本和其他设置。现在目前是空的:

vcpkg-configuration.json:配置文件,用于存储与 vcpkg 相关的各种全局配置设置,对于 vcpkg 的行为和配置具有重要作用。

defaultRegistry:默认注册表的位置。
	kind:指定注册表的类型,Git 仓库类型的注册表。
	baseline:指定注册表的版本(通过Git的提交哈希),vcpkg 将使用这个特定版本的注册表,因为 vcpkg 管理的一堆包,任何包更新都会有新版本,就必须有新的哈希唯一指定,保证此前使用的一组旧版本包能够正常使用,确保使用的是确定的包列表。
	repository:指定 Git 仓库的 URL。
registries:一个数组,列出 vcpkg 可以从哪些注册表下载包。
	kind:指定注册表的类型,artifact 表示静态的、预构建的注册表,通常是从某个 URL 下载的 ZIP 文件。
	location:指定注册表的下载位置。
	name:用于给注册表指定一个名称,方便在 vcpkg 中引用。
name 是一个标签或者是一个配置的别名,你可以通过这个标签来快速选择或切换到特定的配置。
baseline 是一个具体的版本号,它确保了不管你何时使用这个配置,都会锁定到这个特定的版本,防止因为库的更新导致的问题。
# 添加 fmt 依赖项
vcpkg add port fmt


4.创建项目文件
MakeLists.txt 文件内容:

# 项目所需的 CMake 最低版本为 3.10,低于此版本则将生成错误
cmake_minimum_required(VERSION 3.10)
# 项目的名称
project(HelloWorld)
# CMake 配置文件查找 fmt 库, REQUIRED 关键字在找不到包时生成错误
find_package(fmt CONFIG REQUIRED)
# 添加 main.cpp 源文件, 生成 "HelloWorld," 可执行目标。
add_executable(HelloWorld main.cpp)
# 指定 HelloWorld 可执行文件应链接到 fmt 库, PRIVATE 关键字表明 fmt 仅在生成 HelloWorld 时需要
target_link_libraries(HelloWorld PRIVATE fmt::fmt)

main.cpp 文件内容:

//在此 main.cpp 文件中,包含用于使用 <fmt/core.h> 库的 fmt 标头
#include <fmt/core.h>

int main()
{	// main() 函数调用 fmt::print() 将 "Hello World!" 消息输出到控制台
    fmt::print("Hello World!\n");
    return 0;
}

5.运行 CMake 配置
要允许 CMake 项目系统识别 vcpkg 提供的 C++ 库,需要提供 vcpkg.cmake 工具链文件。 在"helloworld" 项目目录中新建 CMakePresets.json 文件:

{
  "version": 2,
  "configurePresets": [
    {
      "name": "default",
      "generator": "Visual Studio 16 2019",
      "binaryDir": "${sourceDir}/build",
      "cacheVariables": {
        "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
      }
    }
  ]
}
version:CMake 配置文件的版本。这里的值 2 表示这是一个使用 CMake 3.20 及更高版本的配置文件。
configurePresets:数组,包含了一个或多个配置预设。每个预设都定义了 CMake 构建配置的一部分。
	name:预设的名称,这里是 "default"。这个名称用于在命令行中引用该预设。
	generator:指定 CMake 使用的构建工具(也称为构建系统)。在这里 使用 "Visual Studio 16 2019" 作为构建工具。
	binaryDir:指定构建输出的目录。${sourceDir} 是一个 CMake 变量,代表源代码的根目录。这里设置为 ${sourceDir}/build,意味着构建输出将位于源代码根目录下的 build 文件夹中。
	cacheVariables:定义了要在 CMake 缓存中设置的变量。
		CMAKE_TOOLCHAIN_FILE 变量指定了 vcpkg 的工具链文件的路径,告诉 CMake 如何使用 vcpkg 来管理项目的依赖。

6. CMake 配置生成

# --preset 使用 CMakePresets.json 文件中定义的名为 "default" 的预设来配置和生成构建系统。
cmake --preset=default



7.生成项目

# 指定构建类型为 Release
cmake --build build --config Release
# 指定构建类型为 Debug
cmake --build build --config Debug



8.运行应用程序目

# 运行 Release 可执行文件
.\build\Release\HelloWorld.exe
# 运行 Debug可执行文件
.\build\Debug\HelloWorld.exe

集成到 Visual Studio

常规情况下,集成需要会有很多工作量如设置include目录、lib目录等。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。
Vcpkg优势:

  1. 简化库的管理:确保项目中使用的第三方库是最新的,并且可以方便地更新或回滚。
  2. 减少配置工作:自动化设置项目文件,避免手动添加库路径和编译标志。
  3. 提高编译效率:确保正确的编译选项和依赖关系,从而加快构建速度。

全局集成和移除

全局集成即在任意的 Visual Studio 项目中可直接使用已安装的第三方库,使用 integrate install 命令可集成到全局。
若要移除全局集成,执行integrate remove 命令即可:

# 集成 vcpkg 到 Visual Studio 的命令
vcpkg integrate install



若要移除全局集成,执行integrate remove 命令即可:

vcpkg integrate remove


集成到项目

利用 Visual Studio 中的 nuget 插件来实现集成到指定的某个项目中。
执行命令 integrate project 生成 nuget 配置文件:

# 建议在项目目录下执行
vcpkg integrate project


配置visual studio:“工具” -> “NuGet包管理器” -> “程序包管理设置” -> “NuGet包管理器” -> “程序包源”
-> 添加刚才生成的vcpkg配置文件路径。

设置visual studio使用vcpkg:“工具” -> “NuGet包管理器” -> “管理解决方案的NuGet程序包”,将程序包源设置成vcpkg,为工程安装vcpkg包管理器。


总结

尽可能简单、详细的介绍windows11上搭建环境包管理工具vcpkg的流程和简单的教程,后续会在当前配置的windows11环境上继续增加使用教程。
【官方参考1】
【参考2】
【参考3】

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

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

相关文章

Maven配置国内镜像仓库和本地仓库

参考文章&#xff1a;IDEA配置Maven教程&#xff08;超详细版~)_idea maven配置教程-CSDN博客 1.找到Maven的 settings.xml文件 我的按照路径是&#xff1a;C:\Program Files\Java\apache-maven-3.9.8\conf 2.打开settings.xml文件 我的打开是这个样子 3.增加本地仓库 在根…

简单的docker学习 第12章 Docker Swarm

第12章 Docker Swarm 12.1 swarm 理论基础 12.1.1 简介 Docker Swarm 是由 Docker 公司推出的 Docker 的原生集群管理系统&#xff0c;它将一个 Docker主机池变成了一个单独的虚拟主机&#xff0c;用户只需通过简单的 API 即可实现与 Docker 集群的通信。Docker Swarm 使用 …

护眼大路灯哪个牌子好?2024学生护眼大路灯推荐

护眼大路灯哪个牌子好&#xff1f;护眼大路灯不仅能够提供日常的光线照明&#xff0c;还模拟了太阳光光线&#xff0c;使在室内用眼学习也能够有着自然光般的舒适感&#xff0c;但现在市场上有许多对产品质量把控不过关、光线效果欠佳、存有安全隐患的劣质护眼大路灯产品&#…

MySQL索引及索引的优化策略

1.什么是索引&#xff1f; 索引是对数据库表中一列或多列的值进行排序的一种结构&#xff0c;使用索引可快速访问数据库表中的特定信息 2.为什么使用索引&#xff1a; 1.高效性&#xff1a;利用索引可以提高数据库的查询效率 2.唯一性&#xff1a;索引可以确保所查的数据的唯一…

【已解决】没有密码,如何解除PPT的“只读方式”?

PPT可以设置有密码的“只读方式”&#xff0c;保护文件不被随意编辑更改。 在设置保护后&#xff0c;打开PPT时就会弹出对话框&#xff0c;提示需要“输入密码以修改或以只读方式打开”&#xff0c;也就是输入密码才能编辑修改PPT&#xff0c;如果点击“只读”也能打开文件&am…

2025浙江(杭州)国际安防产品展览会(浙江安博会)

2025浙江&#xff08;杭州&#xff09;国际智慧城市与安防产品展览会 2025hangzhou smart city And Security Expo 时间:2025年4月23-25日 地点:杭州国际博览中心 展会介绍 浙江&#xff08;杭州&#xff09;国际智慧城市及安防产品博览会&#xff08;简称:浙江安博会&#…

探索AutoGGUF:新时代的量化工具

大家好&#xff01;今天我非常激动地向大家介绍一款新工具&#xff0c;叫做AutoGGUF。AutoGGUF是一款全新的图形用户界面&#xff0c;它是用Python语言编写的&#xff0c;基于PyQt6库。PyQt6是Python的一种绑定&#xff0c;用于创建图形用户界面。而AutoGGUF的设计初衷是简化使…

docker 安装 geoserver

docker 安装 geoserver 文章目录 docker 安装 geoserver一、准备工作二、创建容器三、安装插件3.1 插件下载3.2 将插件拷贝进容器3.3 创建新镜像 四、配置 nginx 代理 一、准备工作 # 获取最新镜像 docker pull kartoza/geoserver#创建数据持久化目录 /usr/local/application/…

大模型RAG实战|文本转换:文本分割器、中文标题增强与高级提取管道

ThinkRAG大模型RAG实战系列文章&#xff0c;带你深入探索使用LlamaIndex框架&#xff0c;构建本地大模型知识库问答系统。本系列涵盖知识库管理、检索优化、模型本地部署等主题&#xff0c;通过代码与实例&#xff0c;讲解如何打造生产级系统&#xff0c;实现本地知识库的快速检…

抽象代数精解【8】

文章目录 希尔密码矩阵矩阵基本概念行列式基本概念特殊矩阵关于乘法运算构成群 加解密原理密钥加密函数解密函数 Z 26 上的运算&#xff08; Z 256 与此类似&#xff09; Z_{26}上的运算&#xff08;Z_{256}与此类似&#xff09; Z26​上的运算&#xff08;Z256​与此类似&…

一篇模块化RAG之最新全面系统性综述

RAG访问外部知识库增强了LLMs处理知识密集型任务的能力&#xff0c;随着应用场景需求的增加&#xff0c;RAG系统变得更加复杂。传统的RAG依赖于简单的相似性检索&#xff0c;**面对复杂查询和变化多端的文本块时表现不佳&#xff1a;**对查询的浅层理解、检索冗余和噪声。 朴素…

Elasticsearch未授权访问漏洞

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索】擎&#xff0c;基于RESTful web:接口。Elasticsearch:是用Java开发的&#xff0c;并作为Apache许可条款下的开放源码发布&#xff0c;是当前流行的企业级搜索引擎。Elasticsearch的增别改…

Spring File Storage(文件的对象存储)框架基本使用指南

概述 本文仅作为快速入门&#xff0c;深入学习及使用详见官网 云存储 在开发过程当中&#xff0c;会使用到存文档、图片、视频、音频等等&#xff0c;这些都会涉及存储的问题&#xff0c;文件可以直接存服务器&#xff0c;但需要考虑带宽和存储空间&#xff0c;另外一种方式…

扑翼无人机仿生鸟技术详解

1. 仿生学原理 扑翼无人机仿生鸟技术&#xff0c;顾名思义&#xff0c;是受到自然界鸟类飞行机制的深刻启发而发展起来的一种无人机技术。仿生学原理在此技术中扮演着核心角色&#xff0c;它通过研究鸟类的翅膀结构、飞行姿态、气动效率、能量转换等生物学特性&#xff0c;力求…

Python酷库之旅-第三方库Pandas(066)

目录 一、用法精讲 261、pandas.Series.dt.year属性 261-1、语法 261-2、参数 261-3、功能 261-4、返回值 261-5、说明 261-6、用法 261-6-1、数据准备 261-6-2、代码示例 261-6-3、结果输出 262、pandas.Series.dt.month属性 262-1、语法 262-2、参数 262-3、功…

Hibernate Validator 数据校验框架

文章目录 一、数据校验框架简介1、JSR(Java 规范提案)&#xff1a;Bean Validation2、javax.validation.api3、jakarta.validation.api 二、SpringBoot基础使用1、校验get请求参数2、校验post请求参数3、常用注解4、分组校验5、自定义校验规则5、校验模式6、全局异常处理 一、数…

LabVIEW远程开发

LabVIEW远程开发是指在不同地点的开发者通过网络协同工作&#xff0c;共同开发、调试和维护基于LabVIEW的应用程序。这种开发模式适用于分布式团队、远程办公和全球化项目合作&#xff0c;能够有效利用不同地区的人才和资源。以下是LabVIEW远程开发的详细介绍&#xff1a; 1. 远…

elasticsearch的使用(二)

DSL查询 Elasticsearch的查询可以分为两大类&#xff1a; 叶子查询&#xff08;Leaf query clauses&#xff09;&#xff1a;一般是在特定的字段里查询特定值&#xff0c;属于简单查询&#xff0c;很少单独使用。 复合查询&#xff08;Compound query clauses&#xff09;&am…

C语言程序设计-[4] 算法和程序结构

1、算法 一个程序至少包含两个方面&#xff1a;数据结构和算法&#xff0c;算法就是为解决一个问题而采取的方法和步骤&#xff0c;即对程序操作步骤的描述。 算法有一定的评价标准和表示方法&#xff0c;其中流程图法和N-S结构图法是本章需要介绍的两种方法。 &#xff08;…

校园商铺管理小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商家管理&#xff0c;商品类型管理&#xff0c;商品信息管理&#xff0c;在线咨询管理&#xff0c;咨询回复管理&#xff0c;交流论坛&#xff0c;系统管理 微信端账号功能包括&a…