C++包管理之`vcpkg`简介

news2024/9/9 0:31:46

文章目录

    • 工程文件
    • 安装`vcpkg`
    • 安装`fmt`库
      • 安装全局的库
      • 安装仅该工程使用的库
    • 在`CMake`中使用`vcpkg`
      • 通过`CMAKE_TOOLCHAIN_FILE`使用`vcpkg`
      • 通过CMakePresets.json使用vcpkg

在C++开发中,我们经常会使用一些第三方库,比如说Boostfmtspdlog等等。这些库的安装和使用一直是一个比较头疼的问题,特别是在Windows平台上。vcpkg就是一个用于管理C++库的工具,它可以帮助我们安装和管理C++库。

本文将通过一个示例来介绍vcpkg的基本使用方法。

工程文件

首先,我们需要一个C++工程。这里我们使用CMake来构建工程。该工程使用到了第三方库libfmt. 我们的工程目录结构如下:

.
├── CMakeLists.txt
├── CMakePresets.json
└── main.cpp

CMakeLists.txt内容如下:

cmake_minimum_required(VERSION 3.19)
project(vcpkg_demo)

find_package(fmt CONFIG REQUIRED)

add_executable(vcpkg_demo main.cpp)
target_link_libraries(vcpkg_demo PRIVATE fmt::fmt)

CMakePresets.json内容如下:

{
    "version": 3,
    "cmakeMinimumRequired": {
        "major": 3,
        "minor": 19,
        "patch": 0
    },
    "configurePresets": [
        {
            "name": "default",
            "generator": "Ninja",
            "binaryDir": "${sourceDir}/build",
            "cacheVariables": {
                "CMAKE_TOOLCHAIN_FILE": "/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake"
            }
        }
    ]
}

main.cpp内容如下:

#include <fmt/core.h>
#include <fmt/ranges.h>
#include <vector>

int main() {
    fmt::print("Hello world");

    std::vector<int> v = {1, 2, 3, 4, 5};
    fmt::println("v = {}\n", v);
    return 0;
}

接下来, 我们需要通过vcpkg安装fmt库。

安装vcpkg

首先,我们需要下载vcpkg。可以通过以下命令下载:

git clone https://github.com/microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh # Linux/macOS
# .\bootstrap-vcpkg.bat # Windows

安装fmt

有两种方式, 可以安装全局的库也可以安装仅该工程使用的库.

安装全局的库

然后,我们需要安装fmt库。可以通过以下命令安装:

cd /path/to/vcpkg # 进入vcpkg目录
./vcpkg install fmt

安装仅该工程使用的库

cd vcpkg_demo # 进入工程目录
/path/to/vcpkg/vcpkg new --application
/path/to/vcpkg/vcpkg add port fmt
/path/to/vcpkg/vcpkg install

此时, 会在工程目录下生成一个vcpkg.json文件, 该文件用于记录工程所使用的库.
内如如下:

{
  "dependencies": [
    "fmt"
  ]
}

还有一个 vcpkg-configuration.json 文件, 用于记录工程所使用的库的版本信息.
内容如下:

{
  "default-registry": {
    "kind": "git",
    "baseline": "cacf5994341f27e9a14a7b8724b0634b138ecb30",
    "repository": "https://github.com/microsoft/vcpkg"
  },
  "registries": [
    {
      "kind": "artifact",
      "location": "https://github.com/microsoft/vcpkg-ce-catalog/archive/refs/heads/main.zip",
      "name": "microsoft"
    }
  ]
}

该文件随着vcpkg版本的更新可能会有变化.

CMake中使用vcpkg

通过CMAKE_TOOLCHAIN_FILE使用vcpkg

接下来,我们需要配置CMake,让它能够找到vcpkg安装的库。我们可以通过以下命令配置:

cd vcpkg_demo/../ # 在vcpkg_demo的上一级目录
cmake -DCMAKE_TOOLCHAIN_FILE=/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake -S vcpkg_demo -B build-vcpkg-demo
cmake --build build-vcpkg-demo

通过CMakePresets.json使用vcpkg

CMake Presets 是CMake 3.19版本引入的新特性,它可以帮助我们简化CMake的配置。

cd vcpkg_demo
cmake --preset default
cmake --build build/

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

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

相关文章

QT常用的控件(二)

QT的常用控件 一.按钮类控件1.1 Push Button代码示例: 带有图标的按钮代码示例: 带有快捷键的按钮代码示例: 按钮的重复触发 1.2 Radio Button代码示例: 选择性别代码示例: click, press, release, toggled 的区别代码示例: 单选框分组 1.3 Check Box代码示例: 获取复选按钮的取…

邮件攻击案例系列四:某金融企业遭遇撒网式钓鱼邮件攻击

案例描述 2023 年 3 月末&#xff0c;某知名投资公司业务经理李先生先后收到两封看似是来自邮件服务商和公司网络安全部门发出的邮件&#xff0c;标题是“紧急&#xff1a;邮箱安全备案更新通知”。邮件内容称&#xff0c;由于最近公司内部系统升级&#xff0c;所有员工必须重…

【微信小程序实战教程】之微信小程序的配置文件详解

小程序的配置文件 对于有过服务端开发的程序员来说&#xff0c;肯定对“约定优于配置”并不陌生&#xff0c;这是一种按约定编程的软件设计范式&#xff0c;目的在于减少软件开发者做决定的数量。而微信小程序正好与这种软件设计范式的理念相反&#xff0c;小程序是一种“配置…

java将map转json字符串或者再将json字符串转回map,java将对象转json字符串或者互想转换,对象集合和json字符串互转

1.导入hutool工具依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.16</version></dependency>2.直接复制一下代码运行 import cn.hutool.json.JSONUtil;import java.util.Ar…

【C语言报错已解决】Format String Vulnerability

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 引言 在日常开发中&#xff0c;我们经常会遇到各种各样的bug&#xff0c;其中格式化字符串漏洞报错可能是最让人头疼的一种。这…

谷歌(google)又出新功能了,快来学

谷歌开发客户这个算是每个外贸业务必备的几个基础技能之一了&#xff0c;大家对谷歌这块的用法多少都有些了解。最近谷歌更新了一个功能&#xff0c;类似于商机推荐的功能&#xff0c;我带大家来了解一下。 我们搜索公司之后&#xff0c;他会展示其他用户搜索过的一些信息。大家…

高职院校大数据人才培养成果导向系统构建、实施要点与评量方法

一、引言 在当今信息化快速发展的背景下&#xff0c;大数据已成为推动社会进步和产业升级的重要力量。为满足社会对大数据人才的需求&#xff0c;高职院校纷纷开设大数据相关专业&#xff0c;并致力于探索科学有效的人才培养模式。本文立足于我国信息化与智能化发展趋势&#…

彻底解决WPS右键没有新建文件的问题

1、综合解决 这个教程能解决大部分的问题彻底解决WPS右键没有新建文件的问题 2、作者补充 作者的教程没有那么麻烦

【java】 力扣 最后一个单词的长度

目录 题目链接题目描述代码 题目链接 58.最后一个单词的长度 题目描述 代码 public int lengthOfLastWord(String s) {int n s.length();int count 0;if(s null ||s.length() 0){return 0;}for(int i n-1;i>0;i--){if(s.charAt(i) ){if(count 0) continue;break;}count…

在pytroch中使用CIFAR10完成完整的模型训练套路

模型训练套路&#xff1a; 1.准备数据集2.加载数据集3.搭建神经网络4创建损失函数5.优化器6.设置训练网络的一些参数7.添加tensorboard&#xff08;方便观察&#xff09;8.开始训练.测试9.保存神经网络 准备数据 #准备数据集 dataset_traintorchvision.datasets.CIFAR10("…

外星人入侵_外星人

项目_外星人入侵_外星人 1创建第一个外星人1.1创建Alien类1.2创建Alien实例1.3让外星人出现在屏幕上 2创建一群外星人2.1确定一行可以容纳多少外星人2.2 创建多行外星人2.3创建外星人群2.4重构create_fleet()2.5添加行 3让外星人群移动3.1向右移动外星人3.2创建表示外星人移动方…

迷你世界魔方模型快速制作

做六个不一样颜色的顶部 --黄&#xff0c;绿&#xff0c;红&#xff0c;蓝&#xff0c;橙&#xff0c;白 --local ids{4000,3999, 3998,3997,3996,3995} 游戏脚本运行上一期文章 local x0,y0,z0-39,7,10--起点坐标 --框架、底面、侧面1-4、顶面 local id{682,671,681,680,66…

消息队列rabbitmq的使用

前提条件&#xff1a;环境安装amqp和安装rabbitmq sudo apt-get update sudo apt-get install rabbitmq-amqp-dev 1、创建CMakeLists.txt文件 # Copyright (c) Huawei Technologies Co., Ltd. 2019. All rights reserved.# CMake lowest version requirement cmake_minimum_…

tof系统标定流程之lens标定

1、lens标定详解 为什么在标定tof时需要进行lens的标定,可以说lens标定是一个必不可少的步骤,tof模组也是有镜头的,镜头的畸变会导致进入的光线出现偏差,最终照射到tof芯片表面导致深度图的分布出现畸变,通常是枕形畸变。例外一个用途在于,在计算fppn误差环节需要知道镜头…

机器学习算法与Python实战 | 两行代码即可应用 40 个机器学习模型--lazypredict 库!

本文来源公众号“机器学习算法与Python实战”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;两行代码即可应用 40 个机器学习模型 今天和大家一起学习使用 lazypredict 库&#xff0c;我们可以用一行代码在我们的数据集上实现许多…

【数据结构】队列(链表实现 + 力扣 + 详解 + 数组实现循环队列 )

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构 &#x1f4da;本系列文章为个人学…

流行巨星布兰妮·斯皮尔斯发生了什么事?她现在在哪里过得怎么样

流行音乐公主布兰妮斯皮尔斯是 21 世纪初的经典偶像。她从 15 岁起就开始唱歌和表演&#xff0c;并创作了《Oops I Did it Again》和《Baby One More Time》等热门歌曲。她的歌曲非常出色&#xff0c;在 2000 年荣登榜首。她接下来的几张专辑变得更加畅销&#xff0c;她毫不畏惧…

学习008-02-04-04 Enable Split Layout in a List View(在列表视图中启用拆分布局 )

Enable Split Layout in a List View&#xff08;在列表视图中启用拆分布局 &#xff09; This lesson explains how to enable a Split Layout in a List View. 本课介绍如何在列表视图中启用拆分布局。 The Detail View opens when you select an object from the List Vie…

G120 EPos配置方案及应用场景

EPos功能就是基本定位器功能,它可计算出轴的运行特性,使轴以时间最佳的方式移动到目标位置。EPos功能主要包括:设定值 直接给定(MDI)功能、 选择程序段功能、回参考点功能、点动功能、运行到固定挡块功能。 EPos功能通过处理给定的加速度、速度和位置值生成运行特性曲线,…

node+mysql+layui+ejs实现左侧导航栏菜单动态显示

nodemysqllayuiejs实现左侧导航菜单动态显示 实现思路效果图数据库技术栈代码实现main.html&#xff08;前端首页页面&#xff09;查询资源菜单方法 jsapp.js配置ejs模板 node入门到入土项目实战开始&#xff0c;前端篇项目适合node小白入门&#xff0c;因为我也是小白来学习no…