VS2017 c/c++ YAML组件配置教程
Posted zkccpro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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构建
打开下载的路径,在其中新建两个子文件,命名为:build
、build_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++工程的组织方法:通过 头文件 和 静态链接库获取所有符号的声明和定义,从而顺利进行编译和链接步骤。这种在大型工程中可以有效减少整个工程的代码量,压缩代码库大小,同时又不影响运行时性能 以及 程序员查看符号的声明。
以上是关于VS2017 c/c++ YAML组件配置教程的主要内容,如果未能解决你的问题,请参考以下文章