Debian nie dostarcza już żadnych prekompilowanych pakietów dla gTest. Sugerują integrację frameworka z plikiem makefile projektu. Ale chcę, aby mój plik Makefile był czysty. Jak skonfigurować gTest, tak jak poprzednie wersje (<1.6.0), aby móc połączyć się z biblioteką?
c++
linux
unit-testing
installation
googletest
ManuelSchneid3r
źródło
źródło
./configure && make && make install
przepływ pracy powinien działać dobrze. Nie jestem pewien, czy to uzasadnia post, ponieważ nie różniłby się od kompilowania wielu innych pakietów ze źródła.Odpowiedzi:
Zanim zaczniesz, upewnij się, że przeczytałeś i zrozumiałeś tę notatkę od Google ! Ten samouczek ułatwia korzystanie z gtest, ale może wprowadzać nieprzyjemne błędy .
1. Pobierz googletest framework
wget https://github.com/google/googletest/archive/release-1.8.0.tar.gz
Lub zdobądź to ręcznie . Nie będę zajmować się tym małym poradnikiem, więc jeśli natknąłeś się na to i linki są nieaktualne, możesz je edytować.
2. Rozpakuj i zbuduj test Google
tar xf release-1.8.0.tar.gz cd googletest-release-1.8.0 cmake -DBUILD_SHARED_LIBS=ON . make
3. „Zainstaluj” nagłówki i biblioteki w systemie.
Ten krok może się różnić w zależności od dystrybucji, więc upewnij się, że kopiujesz nagłówki i biblioteki do odpowiedniego katalogu. Osiągnąłem to, sprawdzając, gdzie znajdowały się poprzednie biblioteki Debiana gtest . Ale jestem pewien, że istnieją lepsze sposoby, aby to zrobić. Uwaga:
make install
jest niebezpieczny i nie jest obsługiwany4. Zaktualizuj pamięć podręczną konsolidatora
... i sprawdź, czy GNU Linker zna biblioteki
Jeśli wynik wygląda następująco:
libgtest.so.0 -> libgtest.so.0.0.0 libgtest_main.so.0 -> libgtest_main.so.0.0.0
wtedy wszystko jest w porządku.
gTestframework jest teraz gotowy do użycia. Po prostu nie zapomnij połączyć swojego projektu z biblioteką, ustawiając
-lgtest
flagę konsolidatora i opcjonalnie, jeśli nie napisałeś własnej głównej procedury testowej,-lgtest_main
flagę jawną .Odtąd możesz chcieć przejść do dokumentacji Google i starej dokumentacji na temat frameworka, aby dowiedzieć się, jak to działa. Miłego kodowania!
Edycja: Działa to również dla OS X! Zobacz „Jak prawidłowo skonfigurować GoogleTest w systemie OS X”
źródło
make install
celu, którego można użyć zamiast ręcznego kopiowania biblioteki i nagłówków?'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
o ile mogę powiedzieć.sudo cp -a libgtest_main.so libgtest.so /usr/lib/
już nie działa. Pliku nie ma nawet na początku.Odpowiem na to specjalnie dla użytkowników Ubuntu. Najpierw zainstaluj pakiet programistyczny gtest.
Zauważ, że ten pakiet instaluje tylko pliki źródłowe. Musisz sam skompilować kod, aby utworzyć niezbędne pliki biblioteczne. Te pliki źródłowe powinny znajdować się w / usr / src / gtest. Przejdź do tego folderu i użyj cmake, aby skompilować bibliotekę:
sudo apt-get install cmake # install cmake cd /usr/src/gtest sudo mkdir build cd build sudo cmake .. sudo make sudo make install
Teraz, aby skompilować swoje programy, które używają gtest, musisz połączyć je z:
To działało idealnie dla mnie na Ubuntu 14.04LTS.
źródło
sudo cp *.a /usr/lib
, po prostu wymień go za pomocąsudo make install
powinno wystarczyć.Zajęło mi to trochę czasu, ponieważ normalna "make install" została usunięta i nie używam cmake. Oto moje doświadczenie, którym mogę się podzielić. W pracy, nie mam dostępu użytkownika root w systemie Linux, więc zainstalowałem ramy testowej Google pod moim katalogu domowym:
~/usr/gtest/
.Aby zainstalować pakiet w ~ / usr / gtest / jako biblioteki współdzielone, wraz z przykładową kompilacją:
$ mkdir ~/temp $ cd ~/temp $ unzip gtest-1.7.0.zip $ cd gtest-1.7.0 $ mkdir mybuild $ cd mybuild $ cmake -DBUILD_SHARED_LIBS=ON -Dgtest_build_samples=ON -G"Unix Makefiles" .. $ make $ cp -r ../include/gtest ~/usr/gtest/include/ $ cp lib*.so ~/usr/gtest/lib
Aby sprawdzić poprawność instalacji, użyj następującego testu.c jako prostego przykładu testowego:
#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }
Kompilować:
$ export GTEST_HOME=~/usr/gtest $ export LD_LIBRARY_PATH=$GTEST_HOME/lib:$LD_LIBRARY_PATH $ g++ -I $GTEST_HOME/include -L $GTEST_HOME/lib -lgtest -lgtest_main -lpthread test.cpp
źródło
lgtest_main
), nie ma potrzeby definiowania własnegomain
w pliku testowym.Jeśli korzystasz z CMake, możesz użyć tego,
ExternalProject_Add
co opisano tutaj .Pozwala to uniknąć konieczności przechowywania kodu źródłowego gtest w repozytorium lub instalowania go w dowolnym miejscu. Jest automatycznie pobierany i wbudowywany w drzewo kompilacji.
źródło
Aktualizacja dla Debiana / Ubuntu
Google Mock (package:)
google-mock
i Google Test (packagelibgtest-dev
:) zostały połączone. Nowy pakiet nosi nazwęgoogletest
. Obie stare nazwy są nadal dostępne w celu zapewnienia kompatybilności wstecznej i są teraz zależne od nowego pakietugoogletest
.Tak więc, aby pobrać biblioteki z repozytorium pakietów, możesz wykonać następujące czynności:
sudo apt-get install googletest -y cd /usr/src/googletest sudo mkdir build cd build sudo cmake .. sudo make sudo cp googlemock/*.a googlemock/gtest/*.a /usr/lib
Następnie możesz utworzyć link przeciwko
-lgmock
(lub przeciwko,-lgmock_main
jeśli nie używasz niestandardowej metody głównej) i-lpthread
. To wystarczyło przynajmniej do korzystania z Google Test w moich przypadkach.Jeśli chcesz mieć najnowszą wersję Google Test, pobierz ją z github. Następnie kroki są podobne:
git clone https://github.com/google/googletest cd googletest sudo mkdir build cd build sudo cmake .. sudo make sudo cp lib/*.a /usr/lib
Jak widać, zmieniła się ścieżka, w której tworzone są biblioteki. Należy pamiętać, że nowa ścieżka może wkrótce być prawidłowa również dla repozytoriów pakietów.
Zamiast ręcznie kopiować biblioteki, możesz użyć
sudo make install
. Działa „obecnie”, ale należy pamiętać, że w przeszłości nie zawsze działało. Ponadto nie masz kontroli nad lokalizacją docelową podczas korzystania z tego polecenia i możesz nie chcieć zanieczyszczać/usr/lib
.źródło
Byłem podobnie rozczarowany tą sytuacją i ostatecznie stworzyłem do tego własne pakiety źródłowe Ubuntu. Te pakiety źródłowe umożliwiają łatwe utworzenie pakietu binarnego. Są one oparte na najnowszym źródle gtest & gmock z tego postu.
Pakiet źródłowy Google Test DEB
Pakiet źródłowy Google Mock DEB
Aby zbudować pakiet binarny, wykonaj następujące czynności:
tar -xzvf gtest-1.7.0.tar.gz cd gtest-1.7.0 dpkg-source -x gtest_1.7.0-1.dsc cd gtest-1.7.0 dpkg-buildpackage
Może ci powiedzieć, że potrzebujesz pewnych wstępnie wymaganych pakietów, w którym to przypadku wystarczy je zainstalować za pomocą apt-get. Poza tym, zbudowane pakiety binarne .deb powinny znajdować się w katalogu nadrzędnym.
W przypadku GMock proces jest taki sam.
Na marginesie, chociaż nie jest to specyficzne dla moich pakietów źródłowych, podczas łączenia gtest z twoim testem jednostkowym, upewnij się, że gtest jest dołączony jako pierwszy ( https://bbs.archlinux.org/viewtopic.php?id=156639 ). powszechne łapanie.
źródło
testing::Message::Message()' test.cpp:(.text+0x84): undefined reference to
testing :: internal :: AssertHelper :: AssertHelper (testing :: TestPartResult :: Type, char const *, int, char const *) 'test. cpp :(. text + 0x97): undefined odniesienie do `testing :: internal :: AssertHelper :: operator = (testing :: Message const &) const '... jest tak długie, że nie mogę opublikować całej rzeczy. Zrobiłem to na zupełnie nowej maszynie wirtualnej Ubuntu 14.04, więc nic więcej nie zostało zainstalowane poza niezbędnymi zależnościami.#include <gtest/gtest.h> TEST(MathTest, TwoPlusTwoEqualsFour) { EXPECT_EQ(2 + 2, 4); } int main(int argc, char **argv) { ::testing::InitGoogleTest( &argc, argv ); return RUN_ALL_TESTS(); }
Na wszelki wypadek, gdyby ktoś inny znalazł się w takiej samej sytuacji jak ja wczoraj (2016-06-22) i również nie udało się z już opublikowanymi podejściami - na
Lubuntu 14.04
mnie zadziałało, używając następującego łańcucha poleceń:git clone https://github.com/google/googletest cd googletest cmake -DBUILD_SHARED_LIBS=ON . make cd googlemock sudo cp ./libgmock_main.so ./gtest/libgtest.so gtest/libgtest_main.so ./libgmock.so /usr/lib/ sudo ldconfig
źródło
Ta odpowiedź od askubuntu zadziałała dla mnie. Wydaje się prostsze niż inne opcje i mniej podatne na błędy, ponieważ używa pakietu
libgtest-dev
do pobierania źródeł i stamtąd kompilacji: /ubuntu/145887/why-no-library-files-installed-for-google- test? answertab = głosy # tab-topProszę odnieść się do tej odpowiedzi, ale jako skrót podaję również kroki tutaj:
Potem mogłem
gtest
bez problemów zbudować projekt, od którego zależy .źródło
Poniższa metoda pozwala uniknąć ręcznego manipulowania
/usr/lib
katalogiem, a jednocześnie wymaga minimalnej zmiany wCMakeLists.txt
pliku. Pozwala także na czyste odinstalowanie menedżera pakietówlibgtest-dev
.Chodzi o to, że kiedy otrzymasz
libgtest-dev
pakiet za pośrednictwemŹródło jest przechowywane w lokalizacji
/usr/src/googletest
Możesz po prostu wskazać
CMakeLists.txt
ten katalog, aby mógł znaleźć niezbędne zależnościWystarczy wymienić
FindGTest
zadd_subdirectory(/usr/src/googletest gtest)
Na koniec tak powinno wyglądać
źródło
Spowoduje to zainstalowanie testu Google i biblioteki próbnej w systemie opartym na Ubuntu / Debian:
Przetestowano w Google Cloud na obrazie opartym na Debianie.
źródło
googlemock
, ale nie instalujegoogletest
(gtest). Przynajmniej tak mi się przydarzyło.Spowoduje to zbudowanie i zainstalowanie zarówno gtest, jak i gmock 1.7.0:
mkdir /tmp/googleTestMock tar -xvf googletest-release-1.7.0.tar.gz -C /tmp/googleTestMock tar -xvf googlemock-release-1.7.0.tar.gz -C /tmp/googleTestMock cd /tmp/googleTestMock mv googletest-release-1.7.0 gtest cd googlemock-release-1.7.0 cmake -DBUILD_SHARED_LIBS=ON . make -j$(nproc) sudo cp -a include/gmock /usr/include sudo cp -a libgmock.so libgmock_main.so /usr/lib/ sudo cp -a ../gtest/include/gtest /usr/include sudo cp -a gtest/libgtest.so gtest/libgtest_main.so /usr/lib/ sudo ldconfig
źródło
Dla 1.8.1 na podstawie odpowiedzi @ ManuelSchneid3r musiałem zrobić:
wget github.com/google/googletar xf release-1.8.1.tar.gz tar xf release-1.8.1.tar.gz cd googletest-release-1.8.1/ cmake -DBUILD_SHARED_LIBS=ON . make
Zrobiłem wtedy,
make install
co wydawało się działać dla 1.8.1, ale śledzenie @ ManuelSchneid3r oznaczałoby:źródło