如何在项目中引入googtest(上)——通过编译器引入库

简介: 如何在项目中引入googtest(上)——通过编译器引入库

一、背景

关于googletest之前的博客已经详细地做了一个叙述:参考链接
现在想再自己写的一个Demo中引入googletest并且采用测试驱动开发(Test-Driven Development,TDD)(即:先写测试案例,再完善功能代码,一边写、一边完善)的这种模式。现在将这过程中踩的坑,总结成此博客。

二、资源准备

2.1 源码链接

googletest资源链接

https://gitcode.net/mirrors/google/googletest?utm_source=csdn_github_accelerator

2.2 解压编译

①解压缩后得到如下文件:
在这里插入图片描述
②通过VS打开gtest中的CMakeList:
路径为:

googletest-master\googletest-master\CMakeLists.txt

在这里插入图片描述
③编译静态库:
在这里插入图片描述

2.3 获取生成库和头文件

生成完成后在路径下得到4个静态库:
bash googletest-master\googletest-master\out\build\x64-Debug\lib
注意:带d的是Windows的debug版本库,不带d的是Windows的release版本库
在这里插入图片描述
获取头文件:
googletest-master\googletest-master\googletest\include

在这里插入图片描述

三、准备Demo

3.1 新建一个工程文件在这里插入图片描述

3.2 新建一个libinlucde文件

在这里插入图片描述

将4个编译好的静态库文件放入lib
在这里插入图片描述
将gtest文件放入inlucde中
在这里插入图片描述
## 3.3 将【静态库文件夹、头文件、静态库】引入项目
参考 只都一本心术书的博客
①引入头文件夹: 项目–配置属性–c/c+±-常规–附加包含目录–编辑–添加工程
在这里插入图片描述
include路径(考虑到工程的可移植性,可以用右下角的宏定义对路径进行简略)比如 $(ProjectDir)/include
在这里插入图片描述
引入lib文件夹: 项目–配置属性–链接器–常规–链接库依赖项–编辑–添加工程lib路径
(这里你可能会遇到没有链接器这个子选项的问题,解决方法:项目–属性–配置属性–常规–配置类型–选择动态链接库或者应用程序–应用)
在这里插入图片描述
include路径(考虑到工程的可移植性,可以用右下角的宏定义对路径进行简略)比如 $(ProjectDir)/include
在这里插入图片描述


引入库: 项目–配置属性–链接器–输入–附加依赖项
在这里插入图片描述
# 四、报错警告
引入之后,我们发现项目已经可以找到头文件了并且编译通过
在这里插入图片描述
但是引入测试代码的时候缺报错了:error LNK2038: 检测到“RuntimeLibrary”的不匹配项
在这里插入图片描述
原因:项目文件编译方式和库文件不匹配

库文件是MTD_StaticDebug,项目文件编译方式是MTD_DynamicDebug
参考链接
在这里插入图片描述

这四个选项对应的含义如下:
| 选项 |编译方式 |
|--|--|
| 多线程调试Dll (/MDd) |MD_DynamicDebug |
| 多线程Dll (/MD) |MD_DynamicRelease|
| 多线程(/MT) |MD_StaticRelease |
| 多线程(/MTd)(/MDd) |MD_StaticDebug |

但是有时候你会发现并不是这么简单,明明自己用的是Release模式,为什么选/MD还是会报错呢?
这个原因在于你在:工程属性->链接器->输入->附加依赖项
中添加的.lib有问题。一般lib文件会有后缀带d和不带d的两种,带d的对应的是Debug模式,不带d的对应的是Release模式。把这个改过来说不定就能解决你的问题了。

五、测试代码

#include<iostream>
#include"gtest/gtest.h"
using namespace std;
int main(int argc, char** argv)
{
   
   
    EXPECT_EQ(1 + 1, 2);
    testing::InitGoogleTest(&argc, argv);
    RUN_ALL_TESTS();
    return 0;
}

运行结果:
在这里插入图片描述

六、开始写Demo

采用测试驱动开发去写你的Demo吧!冲!冲!冲!

相关文章
|
2月前
RuntimeSchema包无法引入问题
RuntimeSchema包无法引入问题
9 0
|
5月前
|
JavaScript 前端开发 Java
项目引入文件的常见报错
项目引入文件的常见报错
47 5
|
8月前
|
编译器 程序员 C++
如何在项目中引入googtest(下)——通过CMake引入库
如何在项目中引入googtest(下)——通过CMake引入库
98 0
|
10月前
|
机器学习/深度学习 数据可视化 数据挖掘
【学习】代码里引入的包都是啥东西
【学习】代码里引入的包都是啥东西
140 0
|
10月前
|
JavaScript 开发者
Vite 在运行过程中是如何发现新增依赖的?
Vite 在运行过程中是如何发现新增依赖的?
181 0
|
编解码 Linux 编译器
FFmpeg引入x264扩展
FFmpeg引入x264扩展
161 0
|
JavaScript 内存技术
elecctron引入robotjs的坑
elecctron引入robotjs的坑
717 0
|
存储 JavaScript 前端开发
Vue项目初始化并引入基础依赖
Vue项目初始化并引入基础依赖
270 0
Vue项目初始化并引入基础依赖
|
编译器 Scala 开发者
引入变量|学习笔记
快速学习引入变量。
78 0
|
JSON 数据格式 Python
Python基础 模块化编程(模块的导入) 模块化编程 模块以主程序的方式运行 包和目录 第三方库的安装和导入方法
python基础知识模块,模块化编程,模块的创建和导入 python基础,模块的创建和导入,让模块以主程序的方式运行,python中的包和目录的区别和创建。模块导入另一个包的模块的方法,导入带有包的模块时的注意事项,常见的内置模块。 第三方模块的安装和导入的方法
Python基础 模块化编程(模块的导入)   模块化编程 模块以主程序的方式运行 包和目录 第三方库的安装和导入方法

热门文章

最新文章