So führen Sie ctest aus, nachdem Sie mein Projekt mit cmake erstellt haben

Ich möchte, dass meine Tests jedes Mal gestartet werden, wenn mein Projekt erfolgreich erstellt wurde. Und wenn einige Tests kaputt sind, möchte ich, dass mein Build auch kaputt ist. Standardmäßig muss ich Tests manuell ausführenctest Befehl. CTest kann tatsächlich ein Projekt erstellen, aber ich verwende eine IDE, die aufruftmake Quellen zu bauen. Undmake führt keine Tests durch.

Ich füge diesen Befehl meiner Stammdatei CMakeLists.txt hinzu, aber er funktioniert nicht.

add_custom_command(OUTPUT tests.txt 
                   POST_BUILD
                   COMMAND ctest --output-on-failure)

CMake gibt keine Fehler zurück und alles funktioniert einwandfrei, aber mein benutzerdefinierter Befehl wird nicht aufgerufen. Wie kann ich nach jedem erfolgreichen Build in CMake etwas ausführen?

Aktualisieren:

Meine endgültige Lösung ist diese Funktion:

macro(add_unit_test target target_test)
    set(UNIT_TEST_TARGETS ${UNIT_TEST_TARGETS} ${target_test} PARENT_SCOPE)
    add_test(target ${CMAKE_CURRENT_BINARY_DIR}/target_test)
endmacro(add_unit_test)

es ruftadd_test und speichert das Testziel in einer Liste. Jeder Test in einem Projekt, der von dieser Funktion hinzugefügt wird. In der Wurzel CMakeLists.txt habe ich diesen Code:

add_custom_target( all_tests ALL
                   DEPENDS ${UNIT_TEST_TARGETS}
)
add_custom_command(TARGET all_tests
                   COMMENT "Run tests"
                   POST_BUILD COMMAND ctest ARGS --output-on-failure
                   WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)

Es wird ein benutzerdefiniertes Ziel erstellt, das von allen Komponententests in einem Projekt abhängt. Der benutzerdefinierte Befehl wird nach ausgeführtall_tests Ziel wurde gebaut.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage