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

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

Java中有很多日志库:java.util.logging、Log4j、Logback、Log4j2、slf4j、common-logging。C++的日志库相对来说就比较少了,比如说gloglog4cppspdllog等,目前个人感觉比较好用的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/

编译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库了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容