在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、参考资料

本文同步分享在 博客“雪域迷影”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/u/4609891/blog/4928396

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。