本文首发于个人博客https://kezunlin.me/post/4a1427cf/,欢迎阅读!

compile gtest on ubuntu 16.04

Guide

apt-get

sudo apt-get install libgtest-dev
cd /usr/src/gtest # only source files

compile

git clone https://github.com/google/googletest.git
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz cd googletest
mkdir build
cd build
cmake-gui ..
make -j8
sudo make install

options:

BUILD_SHARED_LIBS=ON

install to /usr/local/

  • for static library, we use libgtest.a
  • for shared library, use use ligbtest.so.

gtest-config.cmake

# - Try to find GTEST
#
# The following variables are optionally searched for defaults
# GTEST_ROOT_DIR: Base directory where all GTEST components are found
#
# The following are set after configuration is done:
# GTEST_FOUND
# GTEST_INCLUDE_DIRS
# GTEST_LIBRARIES
# GTEST_LIBRARYRARY_DIRS include(FindPackageHandleStandardArgs) set(GTEST_ROOT_DIR "" CACHE PATH "Folder contains Google gtest") if(WIN32)
find_path(GTEST_INCLUDE_DIR gtest/gtest.h
PATHS ${GTEST_ROOT_DIR})
else()
find_path(GTEST_INCLUDE_DIR gtest/gtest.h
PATHS ${GTEST_ROOT_DIR})
endif() if(MSVC)
find_library(GTEST_LIBRARY_RELEASE gtest
PATHS ${GTEST_ROOT_DIR}
PATH_SUFFIXES Release)
find_library(GTEST_MAIN_LIBRARY_RELEASE gtest_main
PATHS ${GTEST_ROOT_DIR}
PATH_SUFFIXES Release) find_library(GTEST_LIBRARY_DEBUG gtest
PATHS ${GTEST_ROOT_DIR}
PATH_SUFFIXES Debug)
find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main
PATHS ${GTEST_ROOT_DIR}
PATH_SUFFIXES Debug) set(GTEST_LIBRARY optimized ${GTEST_LIBRARY_RELEASE} ${GTEST_MAIN_LIBRARY_RELEASE} debug ${GTEST_LIBRARY_DEBUG} ${GTEST_MAIN_LIBRARY_DEBUG})
else()
find_library(GTEST_LIBRARY gtest
PATHS ${GTEST_ROOT_DIR}
PATH_SUFFIXES lib lib64) find_library(GTEST_MAIN_LIBRARY gtest_main
PATHS ${GTEST_ROOT_DIR}
PATH_SUFFIXES lib lib64)
endif() find_package_handle_standard_args(GTEST DEFAULT_MSG GTEST_INCLUDE_DIR GTEST_LIBRARY GTEST_MAIN_LIBRARY) if(GTEST_FOUND)
set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
set(GTEST_LIBRARIES ${GTEST_LIBRARY} ${GTEST_MAIN_LIBRARY})
message(STATUS "Found gtest (include: ${GTEST_INCLUDE_DIRS}, library: ${GTEST_LIBRARIES})")
mark_as_advanced(GTEST_ROOT_DIR GTEST_LIBRARY_RELEASE GTEST_LIBRARY_DEBUG
GTEST_MAIN_LIBRARY_RELEASE GTEST_MAIN_LIBRARY_DEBUG
GTEST_LIBRARY GTEST_MAIN_LIBRARY GTEST_INCLUDE_DIR)
endif()

Example

code

whattotest.cpp

#include <math.h>

double squareRoot(const double a) {
double b = sqrt(a);
if(b != b) { // nan check
return -1.0;
}else{
return sqrt(a);
}
}

tests.cpp

#include "whattotest.cpp"
#include <gtest/gtest.h> TEST(SquareRootTest, PositiveNos) {
ASSERT_EQ(6, squareRoot(36.0));
ASSERT_EQ(18.0, squareRoot(324.0));
ASSERT_EQ(25.4, squareRoot(645.16));
ASSERT_EQ(0, squareRoot(0.0));
} TEST(SquareRootTest, NegativeNos) {
ASSERT_EQ(-1.0, squareRoot(-15.0));
ASSERT_EQ(-1.0, squareRoot(-0.2));
} int main(int argc, char **argv) {
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

CMakeLists.txt

cmake_minimum_required(VERSION 2.6)

if(MSVC)
SET(GTEST_ROOT "C:/Program Files/gtest")
else()
# BOOST_THREAD_LIBRARY /usr/lib/x86_64-linux-gnu/libpthread.so
MESSAGE( [Main] " BOOST_THREAD_LIBRARY = ${BOOST_THREAD_LIBRARY}")
endif(MSVC) find_package(GTest REQUIRED) # GTest 1.8.0
include_directories(${GTEST_INCLUDE_DIRS}) # Link runTests with what we want to test and the GTest and pthread library
add_executable(runTests tests.cpp)
target_link_libraries(runTests ${GTEST_LIBRARIES} ${BOOST_THREAD_LIBRARY})
#target_link_libraries(runTests gtest pthread)

compile

mkdir build && cd build && cmake-gui ..
make -j8

run

./runTests

link (optional)

use -lgtest as linker flag and optionally, if you did not write your own test mainroutine, the explicit -lgtest_main flag.

gtest use pthread, so we need -lpthread as well.

-lgtest -lgtest_main -lpthread

Reference

History

  • 20180118: created.
  • 20180122: add shared library part.

Copyright

[Ubuntu篇] 在ubuntu上源码编译gtest,编写gtest-config.cmake并测试的更多相关文章

  1. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

    CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境 什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/ ...

  2. 记一次在mac上源码编译curl,使其支持NSS的过程

    一.背景 在一次学习https原理的过程中,希望客户端指定特定的cipher suites来抓包分析SSL/TLS的握手过程,就想到了使用curl工具,而不是使用浏览器. 接下来使用man curl找 ...

  3. ubuntu上源码编译安装mysql5.7.27

    一.查看操作系统环境和目录结构,并创建mysql用户和组,以及规划安装mysql所需要的目录. #cat /etc/issue 查看发行版本信息: #cat  /proc/version 查看正在运行 ...

  4. ubuntu 16.04上源码编译glog和gflags 编写glog-config.cmake和gflags-config.cmake | compile glog and glags on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/977f5125/,欢迎阅读! compile glog and glags on ubuntu 16.04 Series comp ...

  5. [Windows篇] 在windows 10上源码编译gtest 并编写CMakeLists.txt

    本文首发于个人博客https://kezunlin.me/post/aca50ff8/,欢迎阅读! compile gtest on windows 10 Guide compile gtest on ...

  6. debian 7上源码编译MongoDB 3.4版本

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 要想精通一个数据库,除了知道该数据库的功能特性.使用方法等,还需要能够看懂数据库源码,能够使用gdb工具对其 ...

  7. Ubuntu 16.04上源码编译和安装pytorch教程,并编写C++ Demo CMakeLists.txt | tutorial to compile and use pytorch on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/54e7a3d8/,欢迎阅读最新内容! tutorial to compile and use pytorch on ubuntu ...

  8. ubuntu 14.04上源码编译安装php7

    wget https://downloads.php.net/~ab/php-7.0.0alpha2.tar.bz2 //用winscp把下载好的文件上传到网站中 tar jxf php-7.0.0a ...

  9. ubuntu 16.04上源码编译dlib教程 | compile dlib on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/c6ead512/,欢迎阅读! compile dlib on ubuntu 16.04 Series Part 1: compil ...

随机推荐

  1. SpringBoot 开发案例之参数传递的正确姿势

    前言 开发这么多年,肯定还有不少小伙伴搞不清各种类型的参数是如何传递的,很多同学都是拿来即用,复制粘贴一把撸,遇到问题还是一脸懵逼. 姿势 学习参数传递的正确姿势,先说怎么做,再说为什么,本质上还是复 ...

  2. mybatis 使用redis实现二级缓存(spring boot)

    mybatis 自定义redis做二级缓存 前言 如果关注功能实现,可以直接看功能实现部分 何时使用二级缓存 一个宗旨---不常变的稳定而常用的 一级是默认开启的sqlsession级别的. 只在单表 ...

  3. ZTUnity Profiler概述及Profiler window 说明

    转贴链接:https://www.jianshu.com/p/ca2ee8a51754

  4. iOS 应用签名原理&重签名

    在苹果的日常开发中,真机测试与打包等很多流程都会牵扯到各种证书,CertificateSigningRequest,p12等.但是很多相应的开发者并不理解iOS App应用签名的原理和流程.今天着重讲 ...

  5. Oracle运行脚本:exp,hist 和 err

    上一篇我们讲到:首次使用rman备份数据库时,为了安全起见,我们应将整个数据库exp出来. 显而易见,每次都手敲exp代码是不可取的. ----费时费力还不规范! 为此,我们可以写一个exp脚本,之后 ...

  6. CVE-2019-13272Linuxkernel权限许可和访问控制问题漏洞

    漏洞简介: Linuxkernel是美国Linux基金会发布的开源操作系统Linux所使用的内核. Linuxkernel5.1.17之前版本中存在安全漏洞,该漏洞源于kernel/ptrace.c文 ...

  7. 运用wxs制作微信小程序左滑功能和跳转,性能更优越

    锲子 微信小程序自定义左滑功能加上跳转,换成以往,左滑功能的逻辑一般是在js中实现,但在拖动方面,性能并不是那么的流畅.如今,官方新扩展了一套脚本语言wxs,在IOS设备上运行,性能会比JS快2~20 ...

  8. 监控tomcat,自动启动

    tomcatID=`ps -ef |grep tomcat |grep -v 'grep'|awk '{print $2}'`  tomcatCount=`ps -ef|grep tomcat |gr ...

  9. Spring Boot实战之定制URL匹配规则

    本文首发于个人网站:Spring Boot实战之定制URL匹配规则 构建web应用程序时,并不是所有的URL请求都遵循默认的规则.有时,我们希望RESTful URL匹配的时候包含定界符". ...

  10. [考试反思]0926csp-s模拟测试52:审判

    也好. 该来的迟早会来. 反思再说吧. 向下跳过直到另一条分界线 %%%cbx也拿到了他的第一个AK了呢. 我的还是遥不可及. 我恨你,DeepinC. 我恨透你了.你亲手埋葬所有希望,令我无比气愤. ...