一、前提:

1、假定你的系统为centos6系列

2、假定你已经安装了基本的编译环境,gcc,g++4.4.7

3、假定你已经设置了环境变量:KDS_MOBILE_STOCK_HOME

4、假定你已经安装了unzip解压缩软件,若未安装,请安装之:yum install zip unzip

5、假定你已经安装了vim,若未安装可用vi代替vim命令

二、安装cmake

1、下载源码:http://www.cmake.org/files/v2.8/cmake-2.8.12.tar.gz

2、解压源码目录:tar –xzvf cmake-2.8.12.tar.gz

3、进入cmake-2.8.12目录:cd cmake-2.8.12

4、编译:

./bootstrap

gmake

gmake install

三、安装googletest

1、下载源码:https://codeload.github.com/google/googletest/zip/release-1.8.0

2、解压源码:unzip googletest-release-1.8.0.zip

3、进入源码目录:cd googletest-release-1.8.0

4、创建并进入目录build:mkdir build && cd build

5、编译:cmake .. && make

6、将静态库拷贝至指定lib目录:

cp googlemock/gtest/libgtest.a $KDS_MOBILE_STOCK_HOME/3rd-soft/lib/

cp googlemock/gtest/libgtest_main.a $KDS_MOBILE_STOCK_HOME/3rd-soft/lib/

7、将头文件拷贝至指定include目录:

  1. cp -ri ../googletest/ $KDS_MOBILE_STOCK_HOME/3rd-soft/include/
  2.  
  3. mv $KDS_MOBILE_STOCK_HOME/3rd-soft/include/googletest $KDS_MOBILE_STOCK_HOME/3rd-soft/include/googletest1.8.0

四、建立演示工程

建立工程目录:mkdir gtest_demo && cd gtest_demo

写最外层CMakeLists.txt:vim CMakeLists.txt

  1. # 工程名
  2. set (PROJECT_NAME my-gtest)
  3. PROJECT(${PROJECT_NAME})
  4. SET(CMAKE_C_COMPILER "g++") #选择编译器,默认是gcc
  5.  
  6. message("工程名: " ${PROJECT_NAME})
  7. message("工程目录: " ${PROJECT_SOURCE_DIR})
  8. message("KDS_MOBILE_STOCK_HOME目录: " $ENV{KDS_MOBILE_STOCK_HOME})
  9.  
  10. # 最低版本需求
  11. cmake_minimum_required(VERSION 2.8)
  12.  
  13. set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
  14. set (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
  15.  
  16. message("编译后可执行程序目录: " ${EXECUTABLE_OUTPUT_PATH})
  17. message("编译后库程序文件目录: " ${LIBRARY_OUTPUT_PATH})
  18.  
  19. ADD_SUBDIRECTORY(src)
  20. # ADD_SUBDIRECTORY(gtest) # 此处先注释,原因是一开始没有测试工程

一)、写源代码工程

1、建立并进入源代码目录:mkdir src && cd src

2、完成源代码文件编写:

测试文件我们写两个功能,一个为计算模块calc,实现Add功能,一个为字符串模块string_util,实现将字符串转为数字功能

1)、写calc模块头文件:vim calc.h

  1. # ifndef __KDS_CAlC_H_
  2. # define __KDS_CALC_H_
  3. class Calc
  4. {
  5. public:
  6. static int Add(int a, int b);
  7. };
  8. # endif

2)、写calc模块实现文件:vim calc.cpp

  1. # include "calc.h"
  2. int Calc::Add(int a, int b)
  3. {
  4. return a+b;
  5. }

3)、写string工具模块头文件:vim string_util.h

  1. # ifndef __KDS_STRING_UTIL_H_
  2. # define __KDS_STRING_UTIL_H_
  3. class StringUtil
  4. {
  5. public:
  6. static int ToInt(const char* str);
  7. };
  8. # endif

4)、写string工具模块实现文件:vim string_util.cpp

  1. # include "stdlib.h"
  2. # include "string_util.h"
  3. int StringUtil::ToInt(const char * str)
  4. {
  5. return atol(str);
  6. }

5)、写main函数:vim main.cpp

  1. # include <iostream>
  2. # include "calc.h"
  3. # include "string_util.h"
  4. int main()
  5. {
  6. std::cout<<"3+5="<<Calc::Add(3, 5)<<std::endl;
  7. std::cout<<"ToInt(345)="<<StringUtil::ToInt("345")<<std::endl;
  8. return 0;
  9. }

最后我们需要将这5个文件编译

3、写编译文件:vim CMakeLists.txt

  1. # 打印当前目录
  2. message("源程序工程当前目录: " ${CMAKE_CURRENT_SOURCE_DIR})
  3.  
  4. # 头文件目录
  5. INCLUDE_DIRECTORIES(
  6. $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/include
  7. /usr/local/include/
  8. /usr/include
  9. )
  10.  
  11. AUX_SOURCE_DIRECTORY(. DIR_SRCS)
  12. add_library(src ${DIR_SRCS})
  13.  
  14. add_executable(src_sult ${DIR_SRCS})

至此,源文件已经写完。

4、验证:

1)、返回上一层目录,建立并进入一个临时的build目录:cd ../ && mkdir build && cd build

2)、编译:cmake .. && make

此时可以看到当前目录下已经编译好了src_sult文件,运行之

3)、运行:./src_sult

截图如下:

二)、写测试工程

1、退出src目录:cd ..

2、建立并进入gtest测试工程目录:mkdir gtest && cd gtest

3、写测试calc代码:vim test_calc.cpp

  1. # include <gtest/gtest.h>
  2. # include "src/calc.h"
  3. using namespace std;
  4.  
  5. TEST(Test_Calc, Add)
  6. {
  7. EXPECT_TRUE(Calc::Add(3,5)==8);
  8. }

4、写测试string_util代码:vim test_string_util.cpp

  1. # include <gtest/gtest.h>
  2. # include "src/string_util.h"
  3. using namespace std;
  4.  
  5. TEST(Test_StringUtil, ToInt)
  6. {
  7. EXPECT_TRUE(StringUtil::ToInt("345")==345);
  8. }

5、最后写CMakeLists.txt文件:vim CMakeLists.txt

  1. # 打印当前目录
  2. message("测试工程当前目录: " ${CMAKE_CURRENT_SOURCE_DIR})
  3.  
  4. # 需包含的头文件
  5. INCLUDE_DIRECTORIES(
  6. ${PROJECT_SOURCE_DIR}
  7. $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/include/googletest1.8.0/include
  8. /usr/local/include
  9. /usr/include
  10. )
  11.  
  12. # 需包含的库文件
  13. link_directories(
  14. ${PROJECT_BINARY_DIR}/lib
  15. $ENV{KDS_MOBILE_STOCK_HOME}/3rd-soft/lib
  16. /usr/local/lib
  17. /usr/lib
  18. )
  19.  
  20. find_package(Threads)
  21.  
  22. AUX_SOURCE_DIRECTORY(. DIR_SRC_TESTS)
  23. add_executable(test_sult ${DIR_SRC_TESTS})
  24. TARGET_LINK_LIBRARIES(test_sult uuid gtest gtest_main libsrc.a)
  25.  
  26. TARGET_LINK_LIBRARIES(test_sult ${CMAKE_THREAD_LIBS_INIT})

三、改写最外层CMakeLists.txt文件

1、回到上一层目录:cd ..

记得前面最初的CMakeLists.txt中最后一行ADD_SUBDIRECTORY(gtest)被注释了,把那个#去掉

2、改写后最终的CMakeLists.txt文件:vim CMakeLists.txt

  1. # 工程名
  2. set (PROJECT_NAME my-gtest)
  3. PROJECT(${PROJECT_NAME})
  4. SET(CMAKE_C_COMPILER "g++") #选择编译器,默认是gcc
  5.  
  6. message("工程名: " ${PROJECT_NAME})
  7. message("工程目录: " ${PROJECT_SOURCE_DIR})
  8. message("KDS_MOBILE_STOCK_HOME目录: " $ENV{KDS_MOBILE_STOCK_HOME})
  9.  
  10. # 最低版本需求
  11. cmake_minimum_required(VERSION 2.8)
  12.  
  13. set (EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR})
  14. set (LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
  15.  
  16. message("编译后可执行程序目录: " ${EXECUTABLE_OUTPUT_PATH})
  17. message("编译后库程序文件目录: " ${LIBRARY_OUTPUT_PATH})
  18.  
  19. ADD_SUBDIRECTORY(src)
  20. ADD_SUBDIRECTORY(gtest)

四)运行测试

1、进入build目录:cd build

2、编译:cmake .. && make

此时看到当前目录下已经生成了test_sult测试文件了

3、查看:ls

4、运行之:./test_sult

如下图所示:

googletest进行单元测试(使用cmake编译)的更多相关文章

  1. linux 下cmake 编译 ,调用,调试 poco 1.6.0 小记

    上篇文章 小记了: 关于 Poco::TCPServer框架 (windows 下使用的是 select模型) 学习笔记. http://www.cnblogs.com/bleachli/p/4352 ...

  2. [C] tcharall(让所有平台支持TCHAR)v1.1。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释

    作者:zyl910 v1.1版的改动如下—— 将源码上传到github. 调整目录结构. 添加CMake编译配置文件. 使用doxygen规范注释. 文件清单—— docs\ docs\images\ ...

  3. [C] c99int(让VC等编译器自动兼容C99的整数类型)V1.02。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释

    新版本—— http://www.cnblogs.com/zyl910/p/zlstdint_v100.html[C] zlstdint(让VC.TC等编译器自动兼容C99的整数类型)V1.0.支持T ...

  4. Mysql的cmake编译与安装

    Mysql的cmake编译与安装 实验准备环境: 我的操作系统是centos6.6 编译安装MariaDB之前,我们需要准备一些需要的环境 1.开发包组套件 [root@node19 ~]# yum ...

  5. CentOS下使用cmake编译安装mysql

    一.下载安装所必需的依赖包 1.因为高版本mysql都用cmake安装,所以下载cmake wget http://www.cmake.org/files/v3.0/cmake-3.0.1.tar.g ...

  6. CentOS_5.6下使用cmake编译MySQL_5.5.11

    MySQL 最新的版本5.5.11需要cmake编译安装,估计以后的版本也会采用这种方式,网上找了一些安装方法有些地方是错的,自己整理一份 所以特地记录一下安装步骤及过程,以供参考!1 mysql 5 ...

  7. CentOS_5.6下使用cmake编译MySQL_5.5.11教程

    注:资料来自网络    Centos 5.6编译安装mysql 5.5.11 2011年06月24日 星期五 05:33 MySQL 最新的版本5.5.11需要cmake编译安装,估计以后的版本也会采 ...

  8. cmake编译安装mysql 5.6.12

    cmake安装mysql 5.6.12 从mysql 5.5 开始就要用cmake编译安装 下载mysql 下载地址:http://pan.baidu.com/s/1o68xxqE 一.安装mysql ...

  9. Win10 下Cmake编译配置 Opencv3.1 + Cuda7.5 + VS2013

    折腾了三天终于配置成功了,在此写下编译配置的全部步骤和遇到的很多坑. 整体介绍: OpenCV 中 CUDA 实现的函数还不是太多,使用前要在OpenCV的官网上确认以下你想要的功能是否已经实现,否则 ...

  10. Android开发学习之路--Android Studio cmake编译ffmpeg

      最新的android studio2.2引入了cmake可以很好地实现ndk的编写.这里使用最新的方式,对于以前的android下的ndk编译什么的可以参考之前的文章:Android开发学习之路– ...

随机推荐

  1. angular学习笔记(三十)-指令(7)-compile和link(3)

    本篇接着上一篇来讲解当指令中带有template(templateUrl)时,compile和link的执行顺序: 把上一个例子的代码再进行一些修改: 1.将level-two指令改成具有templa ...

  2. 使用CountDownTimer实现倒计时功能

    // 倒计时60s new CountDownTimer(60000, 1000) { @Override public void onTick(long millisUntilFinished) { ...

  3. Android 视觉规范

    各种分辨率下图片尺寸 工程师通常开发三套UI布局文件,所以设计师通常也要不同的需求处理2-3套切图. con Type Standard Asset Sizes (in Pixels), for Ge ...

  4. zookeeper的原理讲解

    留着以后看:http://blog.csdn.net/u010311445/article/category/1677839

  5. 在Mac系统下用STS搭建一个Spring MVC项目

    [本文出自天外归云的博客园] 从STS的下载到空项目的搭建 1. 下载STS,下载解压缩后点击sts-bundle文件夹中的STS文件启动ide: 2. 创建Spring MVC项目:File-> ...

  6. 在windows下nginx+django+flup python3

    1.安装python 下载最新的python版本,在本文撰写时为 python 3.4, 下载地址:https://www.python.org/ftp/python/3.4.0/python-3.4 ...

  7. java中定义enum示例

    /** * Enumeration for the message delivery mode. Can be persistent or * non persistent. Use the meth ...

  8. JAVA-数据库之更新记录

    相关资料:<21天学通Java Web开发> 更新记录 StatementUpdate.jsp <%@ page language="java" contentT ...

  9. delphi调用webservice (.NET C#版)

    uses XMLIntf, XMLDoc; XML to XTR文件转换 .File-->open打开你要分析的XML文件 .在左边选择你要分析的接点,双击加到中间的转换列表中 .Create- ...

  10. FastText算法原理解析

    1. 前言 自然语言处理(NLP)是机器学习,人工智能中的一个重要领域.文本表达是 NLP中的基础技术,文本分类则是 NLP 的重要应用.fasttext是facebook开源的一个词向量与文本分类工 ...