Ich versuche CTest in CMake, um einige meiner Tests automatisch mit make test
target auszuführen . Das Problem ist, dass CMake nicht "versteht", dass der Test, den ich ausführen möchte, erstellt werden muss, da er Teil des Projekts ist.
Daher suche ich nach einer Möglichkeit, diese Abhängigkeit explizit anzugeben.
dependencies
cmake
ctest
claf
quelle
quelle
check
Ziel definiert und sie kollidieren könnenEs gibt tatsächlich eine Möglichkeit zu verwenden
make test
. Sie müssen den Build der ausführbaren Testdatei als einen der Tests definieren und dann Abhängigkeiten zwischen den Tests hinzufügen. Das ist:quelle
Ich benutze eine Variante von Richqs Antwort. In der obersten Ebene
CMakeLists.txt
füge ich ein benutzerdefiniertes Ziel hinzubuild_and_test
, um alle Tests zu erstellen und auszuführen:In den verschiedenen Unterprojektdateien
CMakeLists.txt
untertest/
füge ich jede ausführbare Testdatei als Abhängigkeit vonbuild_and_test
:Mit diesem Ansatz, ich brauche nur
make build_and_test
stattmake test
(odermake all test
), und es hat den Vorteil, nur Testcode Aufbau (und ihre Abhängigkeiten). Schade, dass ich den Zielnamen nicht verwenden kanntest
. In meinem Fall ist es nicht so schlimm , weil ich einen Top-Level - Skript, das funktioniert out-of-Baum Debug- und Release (und Cross-kompilierte) baut durch den Aufrufcmake
und dannmake
, und es übersetzttest
inbuild_and_test
.Offensichtlich ist das GTest-Zeug nicht erforderlich. Ich habe gerade Google Test verwendet / mag und wollte ein vollständiges Beispiel für die Verwendung mit CMake / CTest teilen. Meiner Meinung nach hat dieser Ansatz auch den Vorteil, dass ich ihn verwenden kann
ctest -V
, der die Google Test-Ausgabe anzeigt, während die Tests ausgeführt werden:quelle
Wenn Sie versuchen zu emulieren
make check
, finden Sie diesen Wiki-Eintrag möglicherweise nützlich:http://www.cmake.org/Wiki/CMakeEmulateMakeCheck
Ich habe gerade überprüft, ob dies mit Erfolg funktioniert (CMake 2.8.10).
quelle
make check
. Für Tests mit dominierenden Kompilierungszeiten ist diesctest -R
unbrauchbar.Sparen Sie sich die Kopfschmerzen:
Funktioniert sofort für mich und erstellt Abhängigkeiten, bevor der Test ausgeführt wird. In Anbetracht dessen, wie einfach dies ist, ist die native
make test
Funktionalität fast praktisch, da Sie die Möglichkeit haben, die letzten Kompilierungstests auszuführen, selbst wenn Ihr Code fehlerhaft ist.quelle
make -j4 all && make test
. Und es ist auch schuppig mit einem Nicht-Make-Build-Tool.Wenn Sie CMake> = 3.7 verwenden, wird empfohlen, Fixtures zu verwenden :
Dies bewirkt Folgendes:
test
ausführbares Ziel hinzu, aus dem erstellt wurdetest.cpp
test_build
"Test" hinzu, der Cmake ausführt, um ein Ziel zu erstellentest
test_build
Test als Einrichtungsaufgabe des Gerätstest_fixture
test
Test hinzu, der nur dietest
ausführbare Datei ausführttest
Test, um eine Befestigung zu benötigentest_fixture
.Jedes Mal, wenn ein Test ausgeführt
test
werden soll, wird zuerst ein Test ausgeführttest_build
, der die erforderliche ausführbare Datei erstellt.quelle
$<CONFIG>
nicht gesetzt,--target
wird das zum Argument für die--config
.$<CONFIG>
ist immer nicht leer. Es ist ein Generatorausdruck für den Konfigurationsnamen: cmake.org/cmake/help/latest/manual/… Ich werde die Antwort bearbeiten, um sie trotzdem in Anführungszeichen zu setzen, nur weil es keinen Unterschied macht.cmake
? Ich mache das so :mkdir build; cd build; cmake ..; make
. Und es sieht so aus, als gäbe es keine Standardeinstellungen und alle zugehörigen Variablen sind leer, bis sieCMAKE_BUILD_TYPE
manuell festgelegt werden. (Derzeit auf Debian 10, andere Plattformen nicht überprüft)Das habe ich herausgehämmert und benutzt:
YMMV
quelle
Alle obigen Antworten sind perfekt. Tatsächlich verwendet CMake CTest als Testwerkzeug. Die Standardmethode (ich denke es ist) für die Mission lautet:
Führen Sie dann cmake aus und machen Sie , um die Ziele zu erstellen. Danach können Sie entweder make test ausführen oder einfach ausführen
Sie erhalten das Ergebnis. Dies wird unter CMake 2.8 getestet.
Überprüfen Sie die Details unter: http://cmake.org/Wiki/CMake/Testing_With_CTest#Simple_Testing
quelle
enable_testing()
,add_test()
usw. Das Problem ist , dass er den Build - Befehl vor dem Ausführen von Tests manuell ausgeben muss. Er möchte, dass dasmake test
Ziel die ausführbaren Testdateien nach Bedarf automatisch erstellt.Alle Antworten sind gut, aber sie implizieren einen Verstoß gegen die Tradition, um einen Test auf Befehl durchzuführen
make test
. Ich habe diesen Trick gemacht:Dies bedeutet, dass der Test aus dem Erstellen (optional) und Ausführen eines ausführbaren Ziels besteht.
quelle
make
und verliert die CMake-Funktion zum Generieren von Skripten für andere Build-Tools.