在Windows10中使用VS2019和CMake 3.18.3编译安装yaml-cpp库

1、应用背景

由于采用C++编写控制台程序的过程中使用yaml文件比较多,目前使用比较的多的就是yaml-cpp这个C++ yaml解析库了。之前写过两篇关于在CentOS7下编译yaml-cpp库Windows10下使用VS2017编译和使用yaml-cpp库的文章。
最近实际项目中换成了最新版的Visual Studio 2019,我使用的Windows系统是Win7和Windows10,所以需要重新编译基于VS2019下的yaml-cpp的Debug和Release版本的Win32的静态lib库,大体步骤和Windows10下使用VS2017编译和使用yaml-cpp库这篇博客描述的一致。

2、下载yaml-cpp源代码

首先从https://github.com/jbeder/yaml-cpp上下载源代码

git clone https://github.com/jbeder/yaml-cpp.git

使用git拉取代码
或者直接在https://github.com/jbeder/yaml-cpp上下载zip文件,然后解压缩到指定的文件目录下:

下载yaml-cpp的zip压缩包

3、使用VS2019和CMake3.18.3编译yaml-cpp

首先确保已经在自己的系统下安装了VS2019和CMake
我的系统是Windows7、VS2019、CMake 3.18.3,可以根据需要选择Windows10、CMake 3.19.2也行
解压后的yaml-cpp源码包目录结构如下:

yaml-cpp的源代码

Github仓库上对于在Windows10下使用yaml-cpp的CMake编译介绍到比较简单,具体如下图所示:
使用CMake编译yaml-cpp库

下载好yaml-cpp源代码并解压到F:\rate\iot_sdk\third_part目录下,然后再该目录下创建一个build目录,用于存放编译过程中的中间文件,这样做主要是为了不影响源代码,弄错了可以删除重来。
我在Windows7系统下使用VS2019和CMake 3.18.3编译yaml-cpp的命令为:

cmake .. -G "Visual Studio 16 2019" -A Win32 -DCMAKE_INSTALL_PREFIX=F:\rate\iot_sdk\third_part\yaml-cpp\install  -DYAML_BUILD_SHARED_LIBS=OFF ..

或者

cmake .. -G "Visual Studio 16 2019 Win32 "  -DCMAKE_INSTALL_PREFIX=F:\rate\iot_sdk\third_part\yaml-cpp\install  -DYAML_BUILD_SHARED_LIBS=OFF ..

上面的-G命令指定了VS2019作为工具,-DCMAKE_INSTALL_PREFIX指定安装目录,
-DYAML_BUILD_SHARED_LIBS指定是否编译动态库的开关,ON表示编译动态库,OFF表示不编译动态库只编译静态库。


YAML_CPP.sln

然后使用VS2019打开YAML_CPP.sln工程文件,如下图所示:


使用VS2019打开YAML_CPP.sln工程文件

选择自己的Windows SDK版本

3.1、使用VS2019编译Win32 Debug模式的yaml-cppd.lib

选择需要编译的平台和模式,如Win32/Win64以及Debug/Release
上面选择了Debug以及Win32,然后右键点击【解决方案】-》【生成解决方案】

生成解决方案

然后会生成一些基于Win32平台的Debug版本的静态库
其他静态库

yaml-cpd.lib静态库

这个yaml-cppd.lib就是我们使用VS2019项目编译出来的基于Win32平台的Debug静态库,在使用VS2019开发yaml-cpp的项目中需要引入这个lib库

3.2、使用VS2019编译Win32 Release模式的yaml-cpp.lib

选择Release、Win32,右键点击【解决方案】-》【生成解决方案】,如下图所示:


编译Win32 Debug模式的yaml-cpp.lib库

yaml-cpp.lib库

其他lib库

关于在Windows7下使用VS2019编译Win64位的Debug库和Release库的方法也是类似的,对应的CMake编译命令为:

cmake .. -G "Visual Studio 16 2019 Win64 "  -DCMAKE_INSTALL_PREFIX=F:\rate\iot_sdk\third_part\yaml-cpp\install  -DYAML_BUILD_SHARED_LIBS=OFF ..

生成了YAML-CPP.sln项目工程后,使用VS2019打开,分别选择Win64位的Debug或Win64的Release模式,然后右键点击【解决方案】-》【生成解决方案】,会分别在相应目录下生成yaml-cppd.lib和yaml-cpp.lib文件

4、在VS2019中使用yaml-cpp库读写yaml文件

这个在VS2019中引入yaml-cpp库的方式和VS2017中一样,具体可以参考我之前的博客Windows10下使用VS2017编译和使用yaml-cpp库

在VS2019中使用yaml-cpp

运行结果

测试的config.yaml文件如下:

lastLogin: 2021-01-20 08:26:10
username: root
password: 123

C++测试源代码如下:

#include <iostream>
#include <fstream>
#include "yaml-cpp/yaml.h"


int main()
{
    YAML::Emitter out;
    out << "Hello, World!";

    std::cout << "Here's the output YAML:\n" << out.c_str();

    YAML::Node config = YAML::LoadFile("config.yaml");

    if (config["lastLogin"]) {
        std::cout << "Last logged in: " << config["lastLogin"].as<std::string>() << std::endl;
    }

    const std::string username = config["username"].as<std::string>();
    const std::string password = config["password"].as<std::string>();

    //login(username, password);
    //config["lastLogin"] = getCurrentDateTime();
    config["lastLogin"] = "2021-01-21 10:26:10";


    std::cout << "username: " << username << ", password: " << password << std::endl;

    std::ofstream fout("config.yaml");
    fout << config;

    return 0;
}

5、参考资料

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

推荐阅读更多精彩内容