Verwenden Sie Google Test von Qt in Windows

8

Ich habe eine einfache Testdatei, TestMe.cpp:

%Vor%

Ich habe Google Test als statische Bibliothek erstellt. (Ich kann das Makefile zur Verfügung stellen, wenn es relevant ist.)

Ich kann TestMe.cpp problemlos über eine Befehlszeile kompilieren:

%Vor%

Es läuft wie erwartet.

Allerdings kann ich das in Qt nicht kompilieren. Meine Qt-Projektdatei im selben Verzeichnis:

%Vor%

Dies führt zu 17 "nicht aufgelösten externen Symbol" -Fehlern in Bezug auf gtest-Funktionen.

Ich ziehe meine Haare hier raus, da ich sicher bin, dass es etwas Einfaches ist. Irgendwelche Ideen?

Hier sind einige der externen Symbole, die nicht definiert sind:

%Vor%     
Dave Mateer 06.05.2010, 18:28
quelle

3 Antworten

6

Ich konnte das nie als statische Bibliothek verwenden, aber es funktioniert als DLL.

Zuerst musste ich Google Test als DLL erstellen. Ich hatte keinen Erfolg damit, dies in Visual Studio zu tun, also habe ich einfach mingw32-make benutzt. Sie können das in der Quelle bereitgestellte Makefile verwenden und die folgenden Änderungen vornehmen:

%Vor%

Wenn Sie dann Ihr Testprojekt kompilieren, müssen Sie:

  • Definieren Sie GTEST_LINKED_AS_SHARED_LIBRARY = 1
  • Legen Sie eine Bibliotheksreferenz entweder auf gtest_dll.lib oder gtest_main_dll.lib fest.
  • Fügen Sie gtest.dll oder gtest_main.dll in dasselbe Verzeichnis wie Ihre ausführbare Datei ein.

(Mein Verständnis ist, dass Sie gtest_main nur verwenden, wenn Sie KEINE eigene main () -Funktion bereitstellen.)

Hier ist eine Beispiel-Qt-Profildatei basierend auf der, die ich habe (funktioniert!):

%Vor%     
Dave Mateer 07.05.2010, 20:24
quelle
3

Ich verwende Qt + gtest / gmock ohne irgendwelche Probleme. Ich habe gerade alle möglichen Kombinationen von absoluten / relativen Pfaden mit verschiedenen Schrägstrichen getestet, aber ich konnte Ihr Problem nicht reproduzieren. Haben Sie den Inhalt der Variable "LIBS" aus Makefile.Debug überprüft, die von qmake generiert wurde?

Hier ist ein allgemeiner Ratschlag: Verwenden Sie keine absoluten Pfade, da Ihr Code nicht auf anderen Rechnern kompiliert wird, außer wenn Sie ihn an genau denselben Ort herunterladen (was möglicherweise nicht möglich ist) verschiedene Qt-Einstellungen, usw.). Verwenden Sie stattdessen relative Pfade, auch für Bibliotheken von Drittanbietern.

Ich behalte die 3rd-Party-Bibliotheken im Versionskontrollsystem (Sie benutzen eines, richtig?). Ich habe ein "3rdparty" -Verzeichnis und für jedes Projekt, das diese Bibliotheken verwendet, füge ich svn: external property hinzu, das auf eine explizit angegebene Version der 3rd-Party-lib verweist. Der letzte Teil ist wichtig, da er gewährleistet, dass Sie jede Revision Ihres Projekts selbst dann erstellen können, wenn Sie die 3rd-Party-Bibliothek aktualisieren.

    
chalup 06.05.2010 19:17
quelle
0

Ich denke, Sie sind in Ordnung für Ihre qmake-Datei. Aber warum ist INCLUDEPATH absolut und LIBS relativ? Ich würde versuchen, LIBS auch absolut einzustellen.

Von hier Ссылка

Aber was das Hauptproblem ist (denke ich), müssen Sie Schrägstriche in INCLUDEPATH setzen. In der Dokumentation ist es so.

%Vor%     
pastjean 06.05.2010 18:45
quelle

Tags und Links