Wie füge ich die valgrind-tests, um meine cmake "test" target
Ich führen unit-tests durch Gebäude mit ninja
und dann läuft ninja test
aus meinem build-tree:
cmake -G Ninja /source/tree
ninja
ninja test
Aber zu laufen valgrind ich muss es manuell ausführen:
valgrind rel/path/to/test
Möchte ich valgrind
automatisch ausgeführt wird, wenn ich laufen ninja test
. Nach der cmake-Dokumentation "einrichten [valgrind-tests] ist extrem einfach", aber wenn ich
ctest -D NightlyMemoryCheck
Bekomme ich nur diese Fehlermeldung:
Cannot find file: /home/arman/tinman/deb/DartConfiguration.tcl
Site:
Build name: (empty)
WARNING: No nightly start time found please set in CTestConfig.cmake or DartConfig.cmake
Problem initializing the dashboard.
Bekomme ich eine ähnliche Fehlermeldung, wenn ich Folgen Sie den Anweisungen von diesem SO Frage:
Wie mache ich ctest führen Sie ein Programm mit valgrind ohne dart?
Ich weiß nicht, was dart
ist, aber laut der website, es ist eine Art von online-Tests doodad.
Klar extrem einfach ist nicht einfach genug für mich. Kennt jemand eine Lösung, die ist so extrem leicht, dass Sie würde haben, um irgendeine Art von IT-Hexer zu machen nicht Arbeit?
- Ich glaube, Sie müssen verwenden Sie die
ctest_memcheck
Befehl, cf. cmake.org/cmake/help/v3.7/command/... und cmake.org/cmake/help/v3.7/manual/...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein Selbstversorger-Beispiel, dass zeigt, wie durch hinzufügen valgrind-tests, um ein CMake-Projekt. Das Beispiel besteht aus einer einzigen C++ - Quell-Datei
main.cpp
:Enthält der Kodex eine absichtliche Leck, das sollte abgeholt werden von valgrind. Wir brauchen auch eine
CMakeLists.txt
- Datei, die benötigt CMake >= 2.8:Hier ist es wichtig, die CTest-Modul mit
include
statt nur ermöglicht tests mitenable_testing()
. Der CTest-Modul kümmert sich um das einrichten der Maschinen für die Lage zu laufen Speicher überprüft, die bei tests (z.B., sucht er nach den valgrind-executable).Nun öffnen wir eine shell-Sitzung in den Projektordner und erstellen Sie ein Ninja build-tree:
Können wir aufbauen und ausführen von tests ohne valgrind in der Regel so:
Tests mit valgrind wir haben die Verwendung von CMake ist ctest ausführbare Datei mit der test-Aktion
memcheck
:ctest druckt eine Zusammenfassung der Speicher überprüfen von Ergebnissen. Die detaillierte Ausgabe von valgrind befindet sich in einem temporären Verzeichnis auf dem build-tree:
Ist es nicht möglich, automatisch ausgeführt, valgrind, wenn Sie Sie ausführen
ninja test
weil CMake ' s built-in-test-target kann nicht geändert werden und läuft immer tests in der regelmäßigen Weise. Wir können jedoch hinzufügen einer benutzerdefinierten CMake Ziel der ruft ctest mit der-T memcheck
option und dann druckt die detaillierte valgrind-Bericht:--test-action
ist die ausführliche version des switch-T
.Wir dann aufrufen können valgrind-Test von Ninja mit
und bekommen die Ergebnisse als wenn wir ran valgrind manuell.
CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
. Siehe cmake.org/cmake/help/v3.7/variable/...CTEST_MEMORYCHECK_SUPPRESSIONS_FILE
variable? Ich habe versucht, die-D
option ctest, aber das scheint nicht, etwas zu tun. Irgendwelche Ideen? Ich möchte wirklich in der Lage sein, um die Unterdrückung Datei und die memcheck Optionen von der Befehlszeile aus ausgeführt, wenn ctest.