Windows10中使用VS2022和Cmake编译构建C++开源日志库-spdlog

news2025/7/20 10:40:27

一、关于C++中的开源日志库spdlog

Java中有很多日志库:java.util.logging、Log4j、Logback、Log4j2、slf4j、common-logging。C++的日志库相对来说就比较少了,比如说glog、log4cpp、spdllog等,目前个人感觉比较好用的C++开源日志库当属于spdlog了,跨平台,支持cmake编译,在维护中。
具体可以参考github上面的示例:https://github.com/gabime/spdlog
另外spdlog支持两种使用方式:一种是将源代码目录下的include头文件直接添加到自己的项目中使用;另一种使用cmake编译构建出lib静态库或者dll动态库之后以静态和动态链接方式使用。

二、在Windows10中使用cmake和VS2022编译构建spdlog库

1、下载spdlog源代码

首先从github上面下载spdllog的zip包源代码:spdlog-1.x.zip
下载spdlog源代码
下载完spdlog-1.x.zip之后,将其解压到自己电脑的某个目录下,比如:D:\env目录

2、使用Cmake编译spdlog源代码

首先确保自己的电脑上已经安装了Cmake,我安装的Cmake版本是3.22.1。目前spdlog支持cmake的构建,跨平台支持Windows、Linux、MacOS等,spdlog最低支持cmake 3.10版本。如果没有安装cmake可以到cmake官网下载,目前最新版本的稳定版cmake是3.25版本,下载地址为:https://cmake.org/download/

  • cmake-3.25.0-windows-x86_64.msi
  • cmake-3.25.0-windows-x86_64.zip
  • 如下图所示:
    cmake官网下载

编译spdlog
如果是在Linux或MacOS下使用cmake编译构建比较简单,如下:

$ git clone https://github.com/gabime/spdlog.git
$ cd spdlog && mkdir build && cd build
$ cmake .. && make -j

安装好Cmake之后,接下来打开Cmake-Gui开始编译构建spdlog源代码了。
首先在D:\env\spdlog-1.x源码目录新建一个build目录,这样做的好处是将编译生成的文件全部放到一起,防止污染源代码。选择spdlog源代码目录
选择编译生成目录
选择了源代码目录和编译生成之后,点击左下角的·Configure·按钮,会弹出对话框,让我们选择Visual Studio编译器,我电脑上安装了VS2017和VS2022,此处我选择了Visual Studio 17 2022,下面的平台我选择了x64位,选好之后点击Finish按钮,如下图所示:
Configure
Configure之后
上面红色的部分大家可以根据自己的需求来进行勾选,比如说CMake_INSTALL_PREFIX这一项默认安装目录是:C:/Program Files/spdlog,我们可以根据自己的需要修改;SPDLOG_BUILD_SHARED可以编译出动态库;SPDLOG_BUILD_TESTS可以编译出测试示例。此我保持默认选项。

接着在Cmake-gui界面,点击Generate按钮,如下图所示:
Generate
点击Generate按钮之后,可以看到D:\env\spdlog-1.x\build编译生成目录下面多出了一个spdlog的VC++工程,如下图所示:
spdlog工程

最后在Cmake-Gui界面中,点击Open Project按钮,选择VS2022打开spdlog项目,如下图所示:
Open Project
或者直接到D:\env\spdlog-1.x\build目录下,找到spdlog.sln工程文件,直接使用VS2022打开也可以,效果是等价的。
VS2022打开spdlog工程
默认是Debug模式,x64位,我们选择ALL_BUILD项目,右键菜单中选择生成
VS2022编译spdlog项目

可以看到最终生成了spdlogd.lib静态库和example.exe示例程序。所在目录为:D:\env\spdlog-1.x\build\DebugD:\env\spdlog-1.x\build\example\Debug
spdlogd.lib
example.exe
同样的,我们可以生成Releasex64位的spdlog.lib静态库,如下图所示:
spdlog.lib
编译生成出了spdlogd.libspdlog.lib库之后,我们可以将includ头文件和库文件放在某个目录下,供自己创建spdlog项目中使用,如下图所示:

spdlog-1.x库目录

PS D:\spdlog-1.x>
PS D:\spdlog-1.x> tree
卷 Data 的文件夹 PATH 列表
卷序列号为 3EE8-BA3A
D:.
├─include
│  └─spdlog
│      ├─cfg
│      ├─details
│      ├─fmt
│      │  └─bundled
│      └─sinks
└─lib
    ├─Debug
    └─Release
PS D:\spdlog-1.x>

3、VS2022使用spdlog项目

打开VS2022,新疆一个基于VC++的控制台项目
spdlogTest01
spdlogTest01

为该项目添加spdlog的头文件和lib库文件,由于是Debug x64项目,所以需要选择对应的spdlogd.lib库,如下所示:
添加头文件目录
lib库目录:
lib库目录

spdlogd.lib
然后在程序中添加如下的spdlogTest01.cpp代码:

#include "spdlog/spdlog.h"

int main() 
{
    spdlog::info("Welcome to spdlog!");
    spdlog::error("Some error message with arg: {}", 1);
    
    spdlog::warn("Easy padding in numbers like {:08d}", 12);
    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);
    spdlog::info("Support for floats {:03.2f}", 1.23456);
    spdlog::info("Positional args are {1} {0}..", "too", "supported");
    spdlog::info("{:<30}", "left aligned");
    
    spdlog::set_level(spdlog::level::debug); // Set global log level to debug
    spdlog::debug("This message should be displayed..");    
    
    // change log pattern
    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");
    
    // Compile time log levels
    // define SPDLOG_ACTIVE_LEVEL to desired level
    SPDLOG_TRACE("Some trace message with param {}", 42);
    SPDLOG_DEBUG("Some debug message");
	
	return 0;
}

运行上述代码,结果如下图所示:
程序运行结果
至此,Windows10中使用VS2022和Cmake编译构建、使用spdlog日志库完毕,当然如果是Release x64位的则需要选择spdlog.lib库了。

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

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

相关文章

这次把怎么做好一个PPT讲清-审美篇

要提高审美&#xff0c;主要是靠不断的看优秀的作品来知道什么是美的&#xff0c;这个短时间很难速成&#xff0c;只能靠不断的积累。 如何做出具有高级感的PPT&#xff1f; 已剪辑自: https://zhuanlan.zhihu.com/p/38642831 很多年前&#xff0c;走在大街上的PPT大多长得像…

打破边界,边缘计算有何应用场景?

近年来&#xff0c;随着5G、物联网、人工智能技术的发展&#xff0c;越来越多设备接入到互联网中&#xff0c;数据呈现爆炸式增长&#xff0c;对算力、延时提出更好要求&#xff0c;能够在靠近数据源头位置提供计算服务的边缘计算快速兴起&#xff0c;打破更多的场景边界&#…

火法冶炼高冰镍制电池级硫酸镍除硅

#火法冶炼高冰镍制电池级硫酸镍除硅 从供需角度&#xff0c;红土镍矿为最主要原生镍供应来源&#xff0c;而下游需求中不锈钢占据75%-80%份额&#xff0c;最主要的镍供需路径为红土镍矿火法冶炼-镍铁-不锈钢。 但下游需求中电池对硫酸镍的需求增速显著&#xff0c;红土镍矿火法…

m基于matlab的信息传输系统包括卷积编码,QPSK调制解调以及维特比译码

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 信息传输系统主要包括信号发送&#xff0c;信号传输模块&#xff0c;信号接收模块&#xff0c;其中信号发送包括信号的产生&#xff0c;信源的编码&#xff0c;信号的调制等模块&#xf…

24节气—小雪海报、文案分享。雨凝成雪,万物冬藏。

24节气小雪将至。农谚&#xff1a;“小雪雪满天&#xff0c;来年必丰年。”就是指小雪的时候落雪&#xff0c;雨水充沛&#xff0c;还能冻死地里的病菌和害虫&#xff0c;来年雨水必定均匀&#xff0c;是丰收年。 下面是给大家整理的小雪节气文案及海报&#xff0c;希望大家喜欢…

400Gbps 网络面临的挑战

关于 TCP 与 100Gbps 场景的细说&#xff0c;参见&#xff1a;单流 TCP 100Gbps 难题的直观解释 400Gbps 网络将又是一个 “硬件准备好了&#xff0c;可软件没跟上” 的场景。 把一条 TCP Flow 看作一个操作系统进程&#xff0c;多条 Flow 共享 10Gbps 带宽和多进程被同一个 C…

消息队列RabbitMQ的常见面试题目

&#x1f468;‍&#x1f4bb;个人主页&#xff1a; 才疏学浅的木子 &#x1f647;‍♂️ 本人也在学习阶段如若发现问题&#xff0c;请告知非常感谢 &#x1f647;‍♂️ &#x1f4d2; 本文来自专栏&#xff1a; 消息队列 ❤️ 支持我&#xff1a;&#x1f44d;点赞 &#x1…

【数据结构】栈

1.啥是栈 2.栈的使用 3.栈的自定义实现 4.划分栈&#xff0c;虚拟机栈&#xff0c;栈帧概念 &#xff08;1&#xff09;首先咱们来介绍一下什么是栈 Stack就是栈&#xff1a;栈是一种元素先进后出的一种数据结构 你可以把它想象成羽毛球筒&#xff0c;这是最直观的了&#xf…

坑爹,线上同步近 3w 个用户导致链路阻塞引入发的线上问题,你经历过吗?

分享一个印象深刻的线上问题&#xff0c;希望能够给 xdm 带来一点思考 一个稀松平常的工作日&#xff0c;正准备下班的时候&#xff0c;不巧&#xff0c;突发线上紧急问题&#xff0c;心中一万个不情愿&#xff0c;可还是要硬着头皮去定位问题 简单的表象为微服务之间 gRPC通…

打造高安全数字基础设施:中国电子云服务关键行业的宣言

11月18日&#xff0c;主题为“至信铸云守正创新”的2022中国电子云峰会在北京举行。中国电子云在会上发布了其服务关键行业的价值主张、分布式云战略&#xff0c;实测了仓海CeaStor分布式存储的性能。中国电子党组书记、董事长曾毅&#xff0c;中国工程院院士沈昌祥&#xff0c…

制作电子签名

每天一个PS/PR小技巧&#xff08;原理实践&#xff09; 每天一个PS/PR小技巧&#xff08;原理实践&#xff09;_Dezeming的博客-CSDN博客PS是由Adobe Systems开发和发行的图像处理软件。本文的特色在于快速上手和制作一些生活中会常用的功能&#xff0c;并且解释这些功能的具体…

DJYGUI系列文章四:GK文本显示

目录 1 GK文本显示概述 1.1 ansi系 1.2 unicode系 1.3 DJYGUI文本显示 2 字符集说明 3 字符集API说明 3.1 ModuleInstall_Charset&#xff1a;字符编码模块初始化 ​​​​​​​3.2Charset_NlsInstallCharset&#xff1a;安装字符编码 ​​​​​​​3.3 Charset_NlsG…

1527_AURIX_TriCore内核架构开篇与架构概述

全部学习汇总&#xff1a; GreyZhang/g_tricore_architecture: some learning note about tricore architecture. (github.com) 看文档的时候&#xff0c;引用了内核架构的内容。这方面我没有看过&#xff0c;除了ARM也没有什么内核算是较为认真的看过。纵然是ARM&#xff0c;看…

锐捷MSTP实验配置

目录 Vlan基础配置 多生成树配置 查看生成树信息 MSTP其它特性配置 边缘端口 生成树保护特性 生成树时间特性 Vlan基础配置 SW1、SW2配置Vlan vlan range 10,20,40 int g0/0 switchport mode trunk switchport trunk allowed vlan add 10,2…

图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型

图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型 目录 图卷积神经网络 | Python实现基于GCN-GRU图卷积门控循环单元网络模型效果分析基本描述模型结构程序实现参考资料效果分析 基本描述 GCN-GRU 模型是用于动态网络数据中动态不确定意见预测的端到端可训练…

Linux多线程编程

文章目录1、线程基本知识2、线程控制3、线程同步与互斥<1>线程互斥<2>线程同步条件变量生产者消费者模型POSIX信号量读者写者问题<3>线程池<4>单例模式1、线程基本知识 线程概念 线程是在进程内部运行的一个执行分支(执行流)&#xff0c;属于进程的一部…

Vue2.0开发之——Vue基础用法-条件渲染指令(23)

一 概述 条件渲染指令—v-if和v-showv-elsev-else-if 二 条件渲染指令—v-if和v-show 2.1 条件渲染指令 条件渲染指令用来辅助开发者按需控制 DOM 的显示与隐藏。条件渲染指令有如下两个&#xff0c;分别是&#xff1a; v-ifv-show 2.2 示例 布局代码 <div id"a…

【考研复试】计算机专业考研复试英语常见问题五(兴趣爱好/实践经历篇)

相关链接&#xff1a; 【考研复试】计算机专业考研复试英语常见问题一&#xff08;家庭/家乡/学校篇&#xff09;【考研复试】计算机专业考研复试英语常见问题二&#xff08;研究方向/前沿技术/本科毕设篇&#xff09;【考研复试】计算机专业考研复试英语常见问题三&#xff0…

Redhat(10)-防火墙-文件管理-JINJA2模板-Cron-文件权限-NTP-autofs

1.防火墙 2.文件管理 3.JINJA2模板 4.Cron作业 5.文件权限 6.NTP 7.autofs 1.防火墙 网络过滤子系统-netfilter&#xff1a;修正、丢弃数据包。 firewalld是什么&#xff1f; 就是处理网卡来的数据包。 1.源地址被分配给特定区域&#xff0c;应用该区域的规则。 2.网卡…

PyQt5 QLineEdit

PyQt5 QLineEditQLineEdit常用方法及属性QLineEdit 实例1QLineEdit 实例2QLineEdit 实例3QLineEdit 综合示例QLineEdit常用方法及属性 QLineEdit 实例1 import sys from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import *class MyLineEditWindo…