Instalacja gtest na Linuxie lub Windowsie

Jak wiemy przy każdym, rozwijającym się produkcie jego skomplikowanie rośnie, a im bardziej skomplikowany tym łatwiej wprowadzić błąd. Dlatego też stosuje się testy m.in. jednostkowe -aby przetestować poprawność jakiejś jednostki kodu, oraz aby w razie modyfikowania jednostek używanych przez inne jednostki zwiększyć prawdopodobieństwo tego, że nic nie popsuliśmy.

W języku C++ najpopularniejszą biblioteką jest gtest, możemy też testować przy jego pomocy programy napisane w języku C.
Gtesta możemy zainstalować z linuxoweo repozytorium pakietów, np. w dystrybucjach debianowych piszemy:

sudo apt-get install libgtest-dev

aczkolwiek polecam pobranie z oficjalnej strony źródeł i samodzielne zbudowanie. Pobierając z oficjalnej strony mamy pewność, że dysponujemy najnowszą wersją.

Budowanie gtesta ze źródeł
Jeśli zdecydujemy się na ten krok możemy zamiast ręcznego pobierania z oficjalnej strony pobrać całe repozytorium, w tym celu wystarczy w terminalu wpisać:

git clone https://github.com/abseil/googletest.git

Po pobraniu należy wejść do katalogu z rozpakowanym gtestem, i możemy to zainstalować.

Instalacja gtesta dla całego systemu (gdy dysponujemy odpowiednimi uprawnieniami)
Jeśli mamy uprawnienia i chęci instalacji gtesta dla całego systemu wystarczy będąc w katalogu z rozpakowaną biblioteką zawołać w terminalu:

cmake .
make
sudo make install

Instalacja gtesta nie dla całego systemu
Oczywiście jeśli nie będziemy mieli uprawnień do instalacji w systemie musimy zainstalować to w innej lokalizacji, wtedy nasza komenda instalacji będzie się troszeczkę różnić:

cmake -DCMAKE_INSTALL_PREFIX=/katalog/gdzie/mamy/uprawnienia .
make
make install

Osoby lubiące widzieć co się dzieje mogą dodać do make opcję

VERBOSE=1

aby widzieć jak jest budowany gtest.

Budowanie gtesta bez cmake’a
Jeśli ktoś nie ma cmake’a może sobie zwyczajnie skompilować bibliotekę samodzielnie, w tym celu budujemy wszystkie znalezione tam pliki .cc (poza plikiem gtest_main.cc, chyba, że ktoś chce mieć od razu funkcję main w formie biblioteki).
Aby to zrobić należy będąc w katalogu, gdzie jest rozpakowany gtest zastosować komendy:

g++ -Igoogletest/include -Igoogletest  -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest-all.cc.o -c googletest/src/gtest-all.cc
ar qc libgtest.a gtest-all.cc.o
g++ -isystem googletest/include -Igoogletest  -Wall -Wshadow -Werror -Wno-error=dangling-else -DGTEST_HAS_PTHREAD=1 -fexceptions -Wextra -Wno-unused-parameter -Wno-missing-field-initializers -o gtest_main.cc.o -c googletest/src/gtest_main.cc
ar qc libgtest_main.a gtest_main.cc.o

Teraz ponownie powraca kwestia uprawnień do instalacji w systemie, jeśli samodzielnie budowaliśmy cmake’a i mamy uprawnienia możemy zainstalować go do całego systemu:
– wszystkie includy przenieść do: /usr/local/include/gtest
– skompilowane biblioteki (pliki *.a) do: /usr/local/lib/
– Pliki *.pc do: /usr/local/lib/pkgconfig/

Kompilacja programu używającego gtesta
Po zbudowaniu/zainstalowaniu biblioteki gtest możemy go używać. W tym celu potrzebujemy załączyć:

#include 

a podczas linkowania potrzebujemy flag:

-lgtest i -pthread

np. program o nazwie test.cc kompilujemy:

g++ test.cc -lgtest -pthread -o program

Jeśli nie instalowaliśmy biblioteki dla całego systemu również przy każdej kompilacji musimy wskazywać ścieżki do nagłówków gtesta, oraz podczas linkowania podawać ścieżki do skompilowanych bibliotek:

g++ -isystem/sciezka/do/gtest/include test.cc -L/sciezka/do/gtest/lib -lgtest -pthread -o program

To wszystko, można działać.


Budowanie na systemie Windows

  1. Musimy mieć jak wcześniej CMAKEa oraz polecam Cmake-Gui.
  2. Pobieramy naszego gTesta (np. stąd), rozpakowywujemy.
  3. Wchodzimy do głównego katalogu naszego gTesta z poziomu Cmake-Gui, potem poniżej podajemy ścieżkę do zbudowania.
  4. Mając to klikami Configure, pojawi się nam zestaw narzędzi, ja wybrałem MinGw, ale to zależy dla jakiego środowiska chcemy skompilować biblioteki (musi być ten sam kompilator).
  5. Po kliknięciu configure mamy wybór, czy chcemy zainstalować bibliotekę w systemie, czy tylko zbudować:
    1. Jeśli zainstalować warto ustawić CMAKE_INSTALL_PREFIX
    2. Jeśli tylko zbudować należy odznaczyć: INSTALL_GTEST
  6. Klikamy Generate.
  7. Wchodzimy do katalogu, który ustawiliśmy na ścieżkę do zbudowania i w nim musimy dokończyć budowę. Przykładowo jeśli budujemy dla MinGW to wołamy:
    mingw32-make -j4
    ten drugi argument jest opcjonalny, ale umożliwia zbudowanie przy pomocy wielu wątków.
  8. Gotowe! Teraz tylko wskazać ścieżki do includów, oraz do zbudowanej biblioteki (zależnie czy chcieliśmy instalować nasza bibliotekę, czy nie trzeba będzie wskazać liby ze ścieżki, gdzie zainstalowaliśmy, lub ze ścieżki budowania/libs).