Debian bietet keine vorkompilierten Pakete mehr für gTest an. Sie schlagen vor, dass Sie das Framework in das Makefile Ihres Projekts integrieren. Aber ich möchte mein Makefile sauber halten. Wie richte ich gTest wie die früheren Versionen (<1.6.0) ein, damit ich eine Verknüpfung mit der Bibliothek herstellen kann?
c++
linux
unit-testing
installation
googletest
ManuelSchneid3r
quelle
quelle
./configure && make && make install
Workflow einwandfrei funktionieren sollte. Ich bin mir nicht sicher, ob dies einen Beitrag rechtfertigt, da es sich nicht von der Kompilierung vieler anderer Pakete aus dem Quellcode unterscheiden würde.Antworten:
Bevor Sie beginnen, stellen Sie sicher, dass Sie diesen Hinweis von Google gelesen und verstanden haben ! Dieses Tutorial erleichtert die Verwendung von gtest, kann jedoch böse Fehler verursachen .
1. Holen Sie sich das Googletest-Framework
Oder holen Sie es von Hand . Ich werde dieses kleine How-to nicht beibehalten. Wenn Sie also darauf gestoßen sind und die Links veraltet sind, können Sie es jederzeit bearbeiten.
2. Entpacken und erstellen Sie den Google-Test
3. "Installieren" Sie die Header und Bibliotheken auf Ihrem System.
Dieser Schritt kann von Distribution zu Distribution unterschiedlich sein. Stellen Sie daher sicher, dass Sie die Header und Bibliotheken in das richtige Verzeichnis kopieren. Ich habe dies erreicht, indem ich überprüft habe, wo sich Debians frühere gtest-Bibliotheken befanden. Aber ich bin mir sicher, dass es dafür bessere Möglichkeiten gibt. Hinweis:
make install
ist gefährlich und wird nicht unterstützt4. Aktualisieren Sie den Cache des Linkers
... und prüfen Sie, ob der GNU Linker die Bibliotheken kennt
Wenn die Ausgabe so aussieht:
dann ist alles in Ordnung.
gTestframework ist jetzt einsatzbereit. Vergessen Sie nicht, Ihr Projekt mit der Bibliothek zu verknüpfen, indem Sie es
-lgtest
als Linker-Flag und optional, wenn Sie keine eigene Test-Mainroutine geschrieben haben, als explizites-lgtest_main
Flag festlegen .Von hier an möchten Sie möglicherweise die Googles- Dokumentation und die alten Dokumente zum Framework aufrufen, um zu erfahren, wie es funktioniert. Viel Spaß beim Codieren!
Bearbeiten: Dies funktioniert auch für OS X! Siehe "So richten Sie googleTest unter OS X ordnungsgemäß ein"
quelle
make install
Ziel, das Sie verwenden können, anstatt die Bibliothek und die Header manuell zu kopieren?'make install' is dangerous and not supported. Instead, see README for how to integrate Google Test into your build system.
include/gtest
Soweit ich das beurteilen kann, gibt es keine .sudo cp -a libgtest_main.so libgtest.so /usr/lib/
funktioniert nicht mehr. Die Datei ist noch nicht einmal da.Lassen Sie mich dies speziell für Ubuntu-Benutzer beantworten. Installieren Sie zunächst das Entwicklungspaket gtest.
Beachten Sie, dass dieses Paket nur Quelldateien installiert. Sie müssen den Code selbst kompilieren, um die erforderlichen Bibliotheksdateien zu erstellen. Diese Quelldateien sollten sich unter / usr / src / gtest befinden. Navigieren Sie zu diesem Ordner und kompilieren Sie die Bibliothek mit cmake:
Um nun Ihre Programme zu kompilieren, die gtest verwenden, müssen Sie es verknüpfen mit:
Dies funktionierte perfekt für mich unter Ubuntu 14.04LTS.
quelle
sudo cp *.a /usr/lib
Ordnung sein, wenn Sie es einfach neusudo make install
erstellen.Ich habe eine Weile gebraucht, um das herauszufinden, da die normale "make install" entfernt wurde und ich cmake nicht benutze. Hier ist meine Erfahrung zu teilen. Bei der Arbeit habe ich unter Linux keinen Root-Zugriff, daher habe ich das Google-Testframework in meinem Home-Verzeichnis installiert:
~/usr/gtest/
.So installieren Sie das Paket in ~ / usr / gtest / als gemeinsam genutzte Bibliotheken zusammen mit dem Beispielbuild:
Verwenden Sie zum Überprüfen der Installation die folgende Datei test.c als einfaches Testbeispiel:
Kompilieren:
quelle
lgtest_main
) verknüpfen , müssen Sie keine eigenemain
in der Testdatei definieren .Wenn Sie CMake verwenden, können Sie es
ExternalProject_Add
wie hier beschrieben verwenden .Auf diese Weise müssen Sie den gtest-Quellcode nicht in Ihrem Repository behalten oder irgendwo installieren. Es wird automatisch heruntergeladen und in Ihren Build-Baum integriert.
quelle
Update für Debian / Ubuntu
Google Mock (Paket :)
google-mock
und Google Test (Paketlibgtest-dev
:) wurden zusammengeführt. Das neue Paket heißtgoogletest
. Beide alten Namen sind aus Gründen der Abwärtskompatibilität weiterhin verfügbar und hängen jetzt vom neuen Paket abgoogletest
.Um Ihre Bibliotheken aus dem Paket-Repository abzurufen, haben Sie folgende Möglichkeiten:
Danach können Sie gegen
-lgmock
(oder gegen,-lgmock_main
wenn Sie keine benutzerdefinierte Hauptmethode verwenden) und-lpthread
. Dies war zumindest in meinen Fällen ausreichend, um Google Test zu verwenden.Wenn Sie die aktuellste Version von Google Test möchten, laden Sie sie von github herunter. Danach sind die Schritte ähnlich:
Wie Sie sehen, hat sich der Pfad, in dem die Bibliotheken erstellt werden, geändert. Beachten Sie, dass der neue Pfad möglicherweise auch bald für die Paket-Repositorys gültig ist.
Anstatt die Bibliotheken manuell zu kopieren, können Sie sie auch verwenden
sudo make install
. Es funktioniert "derzeit", aber beachten Sie, dass es in der Vergangenheit nicht immer funktioniert hat. Außerdem haben Sie bei Verwendung dieses Befehls keine Kontrolle über den Zielspeicherort und möchten möglicherweise keine Verschmutzung verursachen/usr/lib
.quelle
In ähnlicher Weise war ich von dieser Situation überwältigt und erstellte meine eigenen Ubuntu-Quellpakete dafür. Mit diesen Quellpaketen können Sie auf einfache Weise ein Binärpaket erstellen. Sie basieren auf der neuesten gtest & gmock-Quelle ab diesem Beitrag.
Google Test DEB-Quellpaket
Google Mock DEB-Quellpaket
Gehen Sie folgendermaßen vor, um das Binärpaket zu erstellen:
Es kann Ihnen sagen, dass Sie einige vorausgesetzte Pakete benötigen. In diesem Fall müssen Sie sie nur apt-get installieren. Abgesehen davon sollten sich die erstellten .deb-Binärpakete dann im übergeordneten Verzeichnis befinden.
Für GMock ist der Prozess der gleiche.
Nebenbei bemerkt, obwohl nicht spezifisch für meine Quellpakete, stellen Sie beim Verknüpfen von gtest mit Ihrem Komponententest sicher, dass gtest zuerst enthalten ist ( https://bbs.archlinux.org/viewtopic.php?id=156639 ) gemeinsame gotcha.
quelle
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): undefinierter Verweis auf `testing :: internal :: AssertHelper :: operator = (testing :: Message const &) const '... es ist so lang, dass ich nicht die ganze Sache posten kann. Ich habe dies in einer brandneuen Ubuntu 14.04-VM getan, sodass außer den erforderlichen Abhängigkeiten nichts anderes installiert wurde.#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(); }
Nur für den Fall, dass jemand anderes gestern (22.06.2016) in die gleiche Situation wie ich gerät und auch mit den bereits veröffentlichten Ansätzen keinen Erfolg hat -
Lubuntu 14.04
es hat bei mir mit der folgenden Befehlskette funktioniert:quelle
Diese Antwort von askubuntu hat bei mir funktioniert. Scheint einfacher als andere Optionen und weniger fehleranfällig, da es Pakete verwendet
libgtest-dev
, um die Quellen und Builds von dort abzurufen: abzurufen /ubuntu/145887/why-no-library-files-installed-for-google- test? answertab = Stimmen # tab-topBitte beziehen Sie sich auf diese Antwort, aber nur als Abkürzung gebe ich auch hier die Schritte an:
Danach konnte ich mein Projekt
gtest
ohne Probleme erstellen .quelle
Die folgende Methode vermeidet das manuelle Durcheinander mit dem
/usr/lib
Verzeichnis und erfordert nur minimale Änderungen in IhrerCMakeLists.txt
Datei. Außerdem kann Ihr Paketmanager sauber deinstalliert werdenlibgtest-dev
.Die Idee ist, dass, wenn Sie das
libgtest-dev
Paket über erhaltenDie Quelle wird vor Ort gespeichert
/usr/src/googletest
Sie können einfach
CMakeLists.txt
auf dieses Verzeichnis verweisen , damit es die erforderlichen Abhängigkeiten findetErsetzen Sie einfach
FindGTest
mitadd_subdirectory(/usr/src/googletest gtest)
Am Ende sollte es so aussehen
quelle
Dadurch wird die Google Test- und Mock-Bibliothek in einem Ubuntu / Debian-basierten System installiert:
Getestet in der Google Cloud in einem Debian-basierten Bild.
quelle
googlemock
, aber es wird nicht installiertgoogletest
(gtest). Zumindest ist mir das passiert.Dadurch werden sowohl gtest als auch gmock 1.7.0 erstellt und installiert:
quelle
Für 1.8.1 basierend auf der Antwort von @ ManuelSchneid3r musste ich Folgendes tun:
Ich habe dann das gemacht,
make install
was für 1.8.1 zu funktionieren schien, aber nach @ ManuelSchneid3r würde es bedeuten:quelle