gtest 和 gflags 安装使用

一. gtest

1. 地址

Github: googletest

2. 编译

  • 编译安装
mkdir build
cd build
cmake ..
make
  • samples 源码与单元测试文件命令
cd build
cmake -Dgtest_build_samples=ON ..

测试:

seivl@seivl-Default-string:~/gtest/googletest/build/googletest$ ./sample1_unittest

结果:

Running main() from /home/seivl/gtest/googletest/googletest/src/gtest_main.cc
[==========] Running 6 tests from 2 test suites.
[----------] Global test environment set-up.
[----------] 3 tests from FactorialTest
[ RUN      ] FactorialTest.Negative
[       OK ] FactorialTest.Negative (0 ms)
[ RUN      ] FactorialTest.Zero
[       OK ] FactorialTest.Zero (0 ms)
[ RUN      ] FactorialTest.Positive
[       OK ] FactorialTest.Positive (0 ms)
[----------] 3 tests from FactorialTest (0 ms total)

[----------] 3 tests from IsPrimeTest
[ RUN      ] IsPrimeTest.Negative
[       OK ] IsPrimeTest.Negative (0 ms)
[ RUN      ] IsPrimeTest.Trivial
[       OK ] IsPrimeTest.Trivial (0 ms)
[ RUN      ] IsPrimeTest.Positive
[       OK ] IsPrimeTest.Positive (0 ms)
[----------] 3 tests from IsPrimeTest (0 ms total)

[----------] Global test environment tear-down
[==========] 6 tests from 2 test suites ran. (0 ms total)
[  PASSED  ] 6 tests.

3. 测试

// main.cpp

#include <iostream>
#include <gtest/gtest.h>

int sum(int a, int b) {
    
    
	return a+b;
}

TEST(sum, testSum) {
    
    
	EXPECT_EQ(5, sum(2, 3));	// 求合2+3=5
	EXPECT_NE(3, sum(3, 4));	// 求合3+4 != 3
}
g++ main.cpp -I /home/seivl/gtest/googletest/googletest/include/ -L /home/seivl/gtest/googletest/build/lib -lgtest -lgtest_main -lpthread -std=c++11 -o main

结果:

[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from sum
[ RUN      ] sum.testSum
[       OK ] sum.testSum (0 ms)
[----------] 1 test from sum (0 ms total)

[----------] Global test environment tear-down
[==========] 1 test from 1 test suite ran. (0 ms total)
[  PASSED  ] 1 test.

4. 使用

~/gtest/googletest/googletest$ 路径下执行下面的指令
sudo cp -a include/gtest /usr/local/include/
~/gtest/googletest/build/lib$  路径下执行下面的指令
sudo cp libgtest*.a /usr/lib

现在编译只要:

g++ test.cpp -lgtest -lgtest_main -lpthread -std=c++11 -o test

5. Cmake 中使用

package 文件:

把静态链接库, .a, 文件放进来

seivl@seivl-Default-string:~/me/代码/规划/gtest_test$ tree -L 2
.
├── build
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   ├── gtest_test
│   └── Makefile
├── CMakeLists.txt
├── data
│   ├── 1.png
│   ├── 2.png
│   ├── 3.png
│   ├── 4.png
│   ├── 5.png
│   ├── map1.png
│   ├── map2.png
│   ├── map3.png
│   └── path_visual.gif
├── googletest
│   ├── build
│   ├── BUILD.bazel
│   ├── ci
│   ├── CMakeLists.txt
│   ├── CONTRIBUTING.md
│   ├── CONTRIBUTORS
│   ├── docs
│   ├── googlemock
│   ├── googletest
│   ├── library.json
│   ├── LICENSE
│   ├── main
│   ├── main.cpp
│   ├── README.md
│   └── WORKSPACE
├── include
│   ├── AStar.h
│   └── gtest
├── lib
│   ├── libgmock.a
│   ├── libgmock_main.a
│   ├── libgtest.a
│   └── libgtest_main.a
└── src
    ├── AStar.cpp
    └── main.cpp

修改 Cmakelists 文件:

cmake_minimum_required(VERSION 2.8.9)

project(gtest_test)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(OpenCV REQUIRED)

set(AS_SOURCES
    ${CMAKE_CURRENT_SOURCE_DIR}/src/AStar.cpp
    )
set(AS_HEADERS
    ${CMAKE_CURRENT_SOURCE_DIR}/include/AStar.h
    )
    

include_directories(include maps)

file(GLOB SOURCES "src/*.cpp")

link_directories(lib)
set(GTEST gtest pthread libgtest.a libgtest_main.a libgmock_main.a libgmock.a)

add_executable(gtest_test ${SOURCES} ${AS_HEADERS} ${AS_SOURCES})
target_link_libraries(gtest_test ${OpenCV_LIBS} ${GTEST})

二. gflags

没安装编译会报错:

/usr/bin/ld: error: undefined symbol: 
google::FlagRegisterer::FlagRegisterer(char const*, char const*, 
                                       char const*, char const*, void*, void*)

1. 安装

git clone https://github.com/gflags/gflags.git
cd gflags

mkdir build

cd build

cmake ..

make

sudo make install

2. Cmakelists 修改

在相应的 CMakeLists.txt 中添加

find_package(gflags REQUIRED) 

target_link_libraries(gflags)

就 ok 了

猜你喜欢

转载自blog.csdn.net/qq_35632833/article/details/116334029