VS2017 c/c++ YAML组件配置教程

VS2017 c/c++ YAML组件配置教程

1. 关于YAML

1.1 YAML是什么?

YAML(读作 /ˈjæməl/)是一种配置文件解决方案,规定了一种配置文件的书写格式,对应的解析方法,和多种高级语言的API。

1.2 为什么选用YAML?

最近在为我毕业论文的数据集搭建一个标注工具。具体地,需要把图像中缺陷以人工圈画的方式标注;然后由工具转换成一个YAML配置文件进行数据转储;最后需要解析这个YAML文件并输出标注部分的一些信息,比如像素坐标、像素值信息等。

我用过的同类解决方案还有xml、json等。这次想着用一个没用过的嘛。。。

下面是一个简单的YAML配置文件书写例子,有个直观印象:

pictures:
  # defect1
  -
    num: 1
    defects:
    -
      x_col: 504 # 480 # 503
      y_row: 664 # 640 # 664
      cols: 4 # 50 # 5
      rows: 4 # 50 # 6

  # defect54
  -
    num: 54
    defects:
    -
      x_col: 970
      y_row: 371
      cols: 6
      rows: 2
    - # 灰尘
      x_col: 38
      y_row: 788
      cols: 4
      rows: 2 

1.3 认为对我有帮助的YAML-CPP文档:

YAML语法简介:YAML文件简介 - stardsd - 博客园 (cnblogs.com)

YAML-CPP VS配置方法:(1条消息) Windows10下使用VS2017编译和使用yaml-cpp库_雪域迷影的博客-CSDN博客

2. 配置YAML

基础环境:Win10、VS2017、c/c++、cmake

2.1 下载

yaml-cpp官网:https://github.com/jbeder/yaml-cpp

可以直接在github中下载Zip到windows中想要放置源码的路径。

或者,如果安装了git for windows,可以用命令行在指定路径下载:

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

2.2 cmake构建

打开下载的路径,在其中新建两个子文件,命名为:buildbuild_x64。分别用来编译32位版本和64位版本。如下图:

请添加图片描述图1 新建两个build文件用来装cmake构建后的产物

打开新建的文件夹,比如build文件夹,在文件夹中按住shift + 鼠标右键、选择“在此处打开PowerShell窗口“。

2.2.1 构建一个32位工程:

我们想在build文件夹中构建32位版本,所以这里的camke命令是:

> cmake .. # 默认构建一个32位的工程,用上一级目录中的cmakelist.txt和其他文件进行构建

这里比较坑,**如果你的vs环境是x64的,那么你直接这样cmake就踩坑了!!!**注意通过这个最终编译出来的静态库是32位的!

2.2.2 构建一个64位工程:

如果要构建一个64位的工程,那么你应该这样:

打开刚刚新建的build_x64文件夹,在其中打开PowerShell:

> cmake -G "Visual Studio 15 2017 Win64" .. # 参数意为:构建出一个VC15,vs2017的,64位工程

具体编译命令需要到github的YAML-CPP官网查看:https://github.com/jbeder/yaml-cpp

(反正我是没看到其他博客有说这个细节的,然后我就被坑了。。。)

2.3 编译(生成)

2.2cmake构建的产物是一个VS解决方案(.sln文件,在对应的build文件夹中)。

打开这个.sln文件会发现这个解决方案中有很多工程,很有用的是其中两个:ALL_BUILD工程和yaml-cpp-tests工程。下面逐一介绍一下这两个工程的用途:

2.3.1 ALL_BUILD工程:

用来生成yaml-cpp库的静态库,以供你的工程使用yaml的功能。

选中ALL_BUILD工程,选好你需要的平台,这里有4种平台可选,但常用的还是debug或release:

请添加图片描述
图2 VS工程中选项

选好了之后就是我们喜闻乐见的**”生成“**。这个按钮背后会对源文件进行编译,生成一些目标文件和可执行文件,还有就是我们需要的静态链接库文件:yaml-cpp.lib

这个静态链接库文件在这样的路径下,很容易找到:

请添加图片描述
图3 编译产出的静态库文件路径

静态库里装着打包了这个工程中所有编译符号的定义(实现),所以到时候在自己的工程里,只需要指定yaml库的头文件路径和静态库文件路径,你的工程就可以顺利链接成功,不需要那么多源文件啦!

2.3.2 yaml-cpp-tests工程

这是一个yaml-cpp自带的单测工程,**这鸡汤,十分滴珍贵!**可得好好利用,里面有各种API的用法,还有一个东西很关键,值得参考——就是 yaml-cpp-tests工程的配置属性:
请添加图片描述
图4 yaml-cpp-tests工程的配置属性

当你自己的工程出现令人发指的链接错误时,不妨先试试这个工程在你的机器上能否跑通?能跑通的话,看看这里的配置,对比一下看差在哪了?

2.4 配置到你自己的工程

打开你自己的工程文件,下面就要开始自己的配置了,这是最关键、最易错的一步,咱们就以上面的yaml-cpp-tests工程为例:

2.4.1 C/C++ —— 常规
  • 此步骤缺少或错误可能引发的错误提示:

    编译错误,无法打开头文件。

请添加图片描述
图5 指定头文件路径

就像刚刚说的,静态库文件提供了所有符号的实现,但代码库所有头文件的路径,外部工程必须要拿到。

所以这里需要加上include路径,src路径是没有必要的。相当于告诉编译器该去哪个路径中找符号所有在的头文件,拿到符号的声明。

2.4.2 C/C++ —— 预处理器
  • 此步骤缺少或错误可能引发的错误提示:

    链接错误,LINK2001——无法解析的外部符号。

请添加图片描述
图6 预处理器配置

这里就比较坑了啊,网上所有的教程貌似都没提到这个,但我的工程不配置这个还真就不行。要把这里所有的项全复制到自己的工程里才行。。

2.4.3 链接器 —— 输入
  • 此步骤缺少或错误可能引发的错误提示:

    链接错误,LINK2019——无法解析的外部符号。

请添加图片描述
图7 为链接器指定lib文件位置

这里要写好绝对路径,不能写错咯。

最后,做好以上的配置,只要你的VS平台与yaml生成的版本一致,应该是可以顺利通过编译链接啦!

其实通过这个配置,我们最应该掌握的就是c/c++工程的组织方法:通过 头文件静态链接库获取所有符号的声明和定义,从而顺利进行编译和链接步骤。这种在大型工程中可以有效减少整个工程的代码量,压缩代码库大小,同时又不影响运行时性能 以及 程序员查看符号的声明。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值