google test のインストールでハマったのでメモ

  • 1
    Like
  • 1
    Comment
More than 1 year has passed since last update.

GoogleTestをやろうとして、意外とハマったのでメモ。

ハマった原因

  • google mockがない時代?のドキュメントが多く、ディレクトリ構成が微妙に今と違うドキュメントが多い。
  • 環境変数名で悩む(定番がどれかわからず。。。) =>これは結局わからず。

事前準備

gitとcmakeは別途インストールなど、準備してください。

ビルド

$ git clone https://github.com/google/googletest.git
$ cd googletest
$ mkdir build
$ cd build
$ cmake ..
$ make

ビルド結果確認

できあがったライブラリはどこでしょう。。。

$ find ./ -name "*.a"
googlemock/gtest/libgtest.a
googlemock/gtest/libgtest_main.a
googlemock/libgmock.a
googlemock/libgmock_main.a

ありました。

gtest.hも探しておきます。

$ cd ..
$ find ./ -name "gtest.h"
.//googletest/include/gtest/gtest.h
.//googletest/include/gtest/internal/custom/gtest.h

今後使うのは、googletest/includeの方のinclude directoryです。

ここで環境変数設定しておく

export GTEST_ROOT=".gitのあるディレクトリ"
export GTEST_INCLUDEDIR=$GTESTROOT/googletest/include
export GMOCK_INCLUDEDIR=$GTESTROOT/googlemock/include
export GMOCK_LIBDIR=$GTESTROOT/build/googlemock
export GTEST_LIBDIR=$GTESTROOT/build/googlemock/gtest

適宜、.bashrcなどに書いておく。

環境変数のチェック

環境変数の設定間違えるとハマるのでチェック

 $ ls $GMOCK_INCLUDEDIR
gmock

$ ls $GTEST_INCLUDEDIR                                           
gtest

$ ls $GMOCK_LIBDIR                                               
CMakeFiles              cmake_install.cmake     libgmock_main.a
CTestTestfile.cmake     gtest
Makefile                libgmock.a

$ ls $GTEST_LIBDIR
CMakeFiles              Makefile                libgtest.a
CTestTestfile.cmake     cmake_install.cmake     libgtest_main.a

テストしてみる

main()をlibgtest_main.aに任せる場合

test1.cpp
#include "gtest/gtest.h"

TEST(Test1, test11)
{
    ASSERT_EQ(1, 1);
}
$ g++ test1.cpp -I$GTEST_INCLUDEDIR -L$GTEST_LIBDIR -lgtest -lgtest_main

$ ./a.out
Running main() from gtest_main.cc
[==========] Running 1 test from 1 test case.
[----------] Global test environment set-up.
[----------] 1 test from Test1
[ RUN      ] Test1.test11
[       OK ] Test1.test11 (0 ms)
[----------] 1 test from Test1 (0 ms total)

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

main()を自分で書く場合

test2.cpp
#include "gtest/gtest.h"

TEST(Test1, test11)
{
    ASSERT_EQ(1, 1);
}

int main(int argc, char **argv) {
    ::testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();

}
$ g++ test2.cpp -I$GTEST_INCLUDEDIR -L$GTEST_LIBDIR -lgtest