gtest 编译、安装和使用

本例以 gtest-1.7.0 为例进行讲解。

一、要求:

1. 安装 cmake

二、编译

1. 下载 gtest 源码包,并解压,如:/home/hdc/gtest-1.7.0;
2.  编译 gtest 动态库,进入 gtest-1.7.0 目录,编辑 CMakeLists.txt,修改如下几行:
 10 option(BUILD_SHARED_LIBS "Build shared libraries (DLLs)." OFF)
     19 option(gtest_build_tests "Build all of gtest's own tests." OFF)
     21 option(gtest_build_samples "Build gtest's sample programs." OFF)
将 OFF 修改为 ON,保存并退出。
3.  创建 build 目录,并进入该目录;
4. cmake ..
5. make
6. ls *.so
     libgtest_dll.so                libgtest_main_no_rtti.so  libgtest_main_use_own_tuple.so  libgtest.so
     libgtest_main_no_exception.so  libgtest_main.so          libgtest_no_exception.so
7. sudo cp *.so /usr/lib/gtest
8. cd ../include
9. sudo cp -pr gtest /usr/include
10. sudo chown root:root /usr/include/gtest -R
11. sudo chmod u+w /usr/include/gtest -R
12. sudo mkdir /usr/lib/gtest && cd /usr/lib/gtest
13. sudo ln -s libgtest.so libgtest.so.6
14. sudo ln -s libgtest.so libgtest.so.6.0
15. sudo ln -s libgtest_main.so libgtest_main.so.6
16. sudo ln -s libgtest_main.so libgtest_main.so.6.0

三、使用

1. vim func.h

[cpp] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. #ifndef FUNC_C  
  2. #define FUNC_C  
  3.   
  4.   
  5. #ifdef __cplusplus  
  6. extern "C"  
  7. {  
  8. #endif  
  9.   
  10.   
  11. int fac(int nInput);  
  12.   
  13.   
  14. #ifdef __cplusplus  
  15. }  
  16. #endif  
  17.   
  18.   
  19. #endif // FUNC_C  

2. vim func.c
[cpp] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. #include "func.h"  
  2.   
  3.   
  4. int fac(int nInput)    
  5. {    
  6.     if(nInput < 0) {   
  7.       return -1;  
  8.     }  
  9.   
  10.     int nRev = 1;    
  11.     for(int i = 1; i <= nInput; ++i){    
  12.       nRev *= i;    
  13.     }    
  14.     return nRev;    
  15. }  

3. vim fac_test.cpp
[cpp] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. #include <limits>  
  2. #include "func.h"  
  3. #include "gtest/gtest.h"  
  4.     
  5. TEST(Fac_test, input_negative){    
  6.     EXPECT_EQ(-1, fac(-1));    
  7.     EXPECT_EQ(-1, fac(-2));    
  8.     EXPECT_EQ(-1, fac(-5));    
  9. }    
  10.     
  11. TEST(Fac_test, input_zero){    
  12.     EXPECT_EQ(1, fac(0));    
  13. }    
  14.     
  15. TEST(Fac_test, input_positive){    
  16.     EXPECT_EQ(1, fac(1));    
  17.     EXPECT_EQ(2, fac(2));    
  18.     EXPECT_EQ(6, fac(3));    
  19. }  

4. vim Makefile
[plain] view plaincopy
在CODE上查看代码片派生到我的代码片
  1. CC = gcc  
  2. CPP = g++  
  3. LINK = g++  
  4. CFLAGS = -g -Wall -Werror -Wextra -std=gnu99  
  5. CPPFLAGS = -g -Wall -Werror -Wextra  
  6. LIBS = -L/usr/lib/gtest -lgtest -lgtest_main  
  7.   
  8.   
  9. C__SOURCES = $(wildcard *.c)  
  10. CPPSOURCES = $(wildcard *.cpp)  
  11. OBJECTS = $(patsubst %.c, %.o, $(C__SOURCES)) $(patsubst %.cpp, %.o, $(CPPSOURCES))  
  12. TARGET = sample_unittest  
  13.   
  14.   
  15. first: all  
  16.   
  17.   
  18. %.o: %.c  
  19.     $(CC) -c $(CFLAGS) -o $@ $<  
  20.   
  21.   
  22. %.o: %.cpp  
  23.     $(CPP) -c $(CPPFLAGS) -o $@ $<  
  24.   
  25.   
  26. all: $(TARGET)  
  27.   
  28.   
  29. $(TARGET): $(OBJECTS)  
  30.     $(LINK) $(CPPFLAGS) $(LIBS) -o $(TARGET) $(OBJECTS)  
  31.   
  32.   
  33. .PHONY: clean  
  34.   
  35.   
  36. clean:  
  37.     rm -f $(TARGET) $(OBJECTS)  

5. make
6. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/gtest
7. ./sample_unittest

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ReentrantReadWriteLock读写锁的使用

类ReentrantLock具有完全互斥排他的效果&#xff0c;即同一时间只有一个线程在执行ReentrantLock.lock()后面的代码。这样虽然保证了线程的安全性&#xff0c;但是效率低下。JDK提供了ReentrantReadWriteLock读写锁&#xff0c;使用它可以加快效率&#xff0c;在某些不需要操作…

idea如何把包变为模块_让我们将包变成模块系统!

idea如何把包变为模块使用构建系统将许多项目分为模块/子项目&#xff08; Maven &#xff0c; Gradle &#xff0c; SBT …&#xff09;&#xff1b; 编写模块化代码通常是一件好事。 将代码分为构建模块主要用于&#xff1a; 隔离代码部分&#xff08;减少耦合&#xff09; …

VS2017无法启动

新安装了VS2017&#xff0c;安装没问题&#xff0c;但是总出现启动时没反应的状况&#xff0c;鼠标双击后转圈&#xff0c;然后就没然后了。。 解决办法&#xff1a; 第一步&#xff1a; 开始-->所有程序-->Microsoft Visual Studio 2017文件夹-->VisualStudio Tool…

gm怎么刷东西 rust_Rust语言:解引用详述,搞不明白这个概念,趁早放弃Rust

Rust是内存安全的&#xff0c;对新手来说&#xff0c;最大的困难是可恶的编译器&#xff0c;在其他语言上面叱咤风云&#xff0c;偏偏被Rust搞到崩溃。所以&#xff0c;大家都戏谑道&#xff0c;Rust是面向编译器编程。和编译器做斗争的过程中&#xff0c;遇到最多的是&#xf…

VS2010中使用gtest简单案例

1、下载googletest代码 https://github.com/google/googletest 2、解压并进入找到msvc文件夹 googletest-master\googletest-master\googletest\msvc 3、打开gtest.sln文件 4、编译gtest和gtest_main工程&#xff0c;生成gtestd.lib和gtest_maind.lib&#xff0c;将这两个静…

记录一次Oracle注入绕waf

这个注入挺特殊的&#xff0c;是ip头注入。我们进行简单的探测: 首先正常发起一次请求&#xff0c;我们发现content-type是76 探测注入我习惯性的一个单引号: 一个单引号我发现长度还是76 我开始尝试单引号&#xff0c;双引号一起: 我失败了长度还是76 一般sql注入输入单引号一…

生成字节码

在这篇文章中&#xff0c;我们将看到如何为我们的语言生成字节码。 到目前为止&#xff0c;我们已经看到了如何构建一种语言来表达我们想要的东西&#xff0c;如何验证该语言&#xff0c;如何为该语言构建编辑器&#xff0c;但实际上我们仍然无法运行代码。 是时候解决这个问题…

Java迭代器contains的问题

功能&#xff1a;ArrayList去除集合中字符串的重复值(字符串的内容相同)&#xff0c;思路&#xff1a;创建新集合方式。 第一种编译运行没问题&#xff0c;第二种写法出错&#xff0c;原因是不可以两次使用it.next()。 错误提示&#xff1a;Exception in thread "main&q…

ad如何镜像器件_使用 Dockerfile 制作镜像

前面几篇文章已经给大家介绍了 Docker 的基本概念&#xff0c;相信大家也会使用 Docker 运行自己想要的容器了。但是只有学会制作镜像&#xff0c;才能将 Docker 应用到我们的项目中去。下面我们就来学习如何使用 Dockerfile 来制作镜像。Dockerfile 是一个文本文件&#xff0c…

centos7.5部署ELk

第1章 环境规划 1.1 ELK介绍 ELK是ElasticSerach、Logstash、Kibana三款产品名称的首字母集合&#xff0c;用于日志的搜集和搜索。 Elasticsearch&#xff1a;是一个开源分布式搜索引擎&#xff0c;提供搜集、分析、存储三大功能&#xff0c;特点是分布式、零配置、自动发…

使用Google Test的一个简单例子

0. 引子 本例是从 gtest-1.5.0 自带的 sample 中的 sample1 改写而来&#xff0c;笔者只添加了一个求 n 的阶层的函数&#xff0c;如下。 void Factorial(int n, int & result ) { result 1; for (int i 1; i < n; i) result * i; } 目的是想测试像这样将返回值放在参…

Java静态方法与非静态方法的泛型

Java中&#xff0c;非静态方法可以使用类的泛型&#xff0c;也可以定义自己的泛型&#xff1b;静态方法由于随着类的加载而加载&#xff0c;不能访问类的泛型&#xff08;因为在创建对象的时候才确定&#xff09;&#xff0c;因此必须定义自己的泛型类型。 详细请参考&#xf…

Android Studio 日志工具

在项目中提供5个方法打印日志 Log.v() 最常见的日志信息 Log.d() 调试信息 Log.i() 用于打印用户操作行为 Log.w()警告潜在风险 Log.e()报错信息 TAG 填入类名就好 msg:要打印的信息 也可以对信息进行过滤 点他弹出自定义的日志过滤器 转载于:https://www.cnblogs.com/feizianq…

jpa加密_使用JPA侦听器的数据库加密

jpa加密最近&#xff0c;我不得不将数据库加密添加到一些字段中&#xff0c;并且发现了很多不好的建议。 建筑问题 最大的问题是建筑。 如果持久性管理器静静地处理您的加密&#xff0c;那么根据定义&#xff0c;您的体系结构将在持久性和安全性设计之间要求紧密而不必要的绑…

同一进程中的线程究竟共享哪些资源

线程共享的环境包括&#xff1a;进程代码段、进程的公有数据(利用这些共享的数据&#xff0c;线程很容易的实现相互之间的通讯)、进程打开的文件描述符、信号的处理器、进程的当前目录和进程用户ID与进程组ID。 进程拥有这许多共性的同时&#xff0c;还拥有自己的个性。有了这些…

物联lot是什么意思_什么是物联网,物联网(lOT)简介

什么是物联网物联网(The Internet of Things&#xff0c;简称IOT)是指通过各种信息传感器、射频识别技术、全球定位系统、红外线感应器、激光扫描器等各种装置与技术&#xff0c;实时采集任何需要监控、 连接、互动的物体或过程&#xff0c;采集其声、光、热、电、力学、化 学、…

Python 位操作运算符

&按位与运算符&#xff1a;参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 &#xff0c;二进制解释&#xff1a; 0000 1100|按位或运算符&#xff1a;只要对应的二个二进位有一个为1时&#xff0c;结果位就为1。(a | b) 输出结果 6…

JavaOne 2016后续活动

我很高兴今年参加了JavaOne&#xff0c;我可以用一个词概括一下这一经验&#xff1a;Brilliant。 对于我来说&#xff0c;今年与往年相比有很大不同&#xff0c;因为我在周日有一个演讲要共同演讲&#xff0c;而我剩下的一周时间都可以参加会议。 因此&#xff0c;我了解到在Ja…

python对初学者的看法_python学习之道(1)——新手小白对print()函数的理解,Python,之路,一,浅谈...

Python学习之路(一) ——浅谈新手小白对print()函数的理解写在前面笔者目前为在校大四学生(某末流211)&#xff0c;大学生活即将画上终点&#xff0c;然而却还没有真正精通一门语言&#xff0c;很是惭愧。在大学期间参加了各种文体活动&#xff0c;获得了很多次演讲比赛的奖项&…

理解Windows内核模式与用户模式

&#xfeff;&#xfeff;1、基础 运行 Windows 的计算机中的处理器有两个不同模式&#xff1a;“用户模式”和“内核模式”。根据处理器上运行的代码的类型&#xff0c;处理器在两个模式之间切换。应用程序在用户模式下运行&#xff0c;核心操作系统组件在内核模式下运行。多个…