Ich habe eine ziemlich große Anwendung, die ich erstellen / pflegen muss, also habe ich mich dazu entschieden, googletest zu verwenden und aus Gründen der Bequemlichkeit die Struktur zu strukturieren Test und der Anwendungscode als Teilprojekte. Ich habe ein Superprojekt mit folgender Struktur erstellt:
%Vor% Mit superproject.pro
Mit defaults.pri
Und Tests.pro
Und Application.pro
: w
Die Anwendung kompiliert und läuft gut, ebenso der Testcode. Aber sobald ich versuche, etwas aus der Anwendung wie folgt hinzuzufügen
%Vor% Der Code wird kompiliert, wird aber nicht mit einem nicht definierten Verweis auf den Util-Konstruktor verknüpft. Die meisten Guides mit dem gleichen Setup gehen davon aus, dass die Vorlage, mit der der Testcode verknüpft ist, TEMPLATE = lib
ist, aber ich kann die Vorlage nicht von app
auf lib
für die Anwendung ändern. Wie kann ich den Linker mit der Anwendung verknüpfen?
Als erstes kann ich nirgends sehen, dass Sie die gtest-Bibliothek in Ihr Test-Teilprojekt eingebunden haben. Der hinzuzufügende Befehl ist LIBS += -lgtest
Generell haben Sie nur zwei Möglichkeiten. Entweder kompilieren Sie Ihr Hauptprojekt als eine Lib, die Sie dann mit Ihrem Test-Unterprojekt verknüpfen, oder Sie müssen alle Ihre .cpp
-Dateien in den Test einbeziehen. In jedem Fall, da es sich um ein separates Projekt handelt, hat Ihr Testprojekt keine Kenntnis von Ihren anderen (Teil-) Projekten.
Ich hoffe, dies wird Sie auf die richtige Antwort hinweisen
Ich kam zu einer Lösung, die tat, was David LUC unten vorgeschlagen hat, seine Antwort ist unvollständig, aber er wird immer noch das Kopfgeld von mir haben.
Am Ende habe ich alle CPP-Dateien in die Quellen von Tests.pro aufgenommen, zB "../Application/util.cpp". Das bedeutet, dass ich die Anwendung im Wesentlichen zweimal baue, einmal als Anwendung, und wenn das Testprojekt kompiliert wird, befinden sich Objektdateien derselben CPP in zwei verschiedenen Projekten. Nicht schön und zeitaufwendig, aber es funktioniert.
Möchte immer noch doppelte Objektdateien vermeiden.