Ubuntu篇-在ubuntu上源码编译gtest编写gtestconfigcmake并测试

51次阅读

共计 3793 个字符,预计需要花费 10 分钟才能阅读完成。

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

compile gtest on ubuntu 16.04

Guide

  • compile gtest on ubuntu 16.04
  • compile gtest on windows 10

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

  • getting-started-with-google-test-on-ubuntu
  • googletest repo
  • gtest-demo
  • setup-googletest-as-a-shared-library-on-linux
  • FindGTest

History

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

Copyright

  • Post author: kezunlin
  • Post link: https://kezunlin.me/post/4a1427cf/
  • Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

正文完
 0