2013-02-27 13 views
16

ich meine Tests wollen jedes Mal mein Projekt ins Leben gerufen werden soll, erfolgreich aufgebaut. Und wenn einige Tests kaputt sind, möchte ich, dass mein Build auch kaputt geht. Standardmäßig muss ich Tests manuell ausführen, indem Sie den Befehl ctest ausführen. CTest kann tatsächlich ein Projekt erstellen, aber ich benutze IDE, die make zum Erstellen von Quellen aufruft. Und make führt keine Tests aus.Wie nach dem Bau mein Projekt mit cmake laufen ctest

Ich füge diesen Befehl, um meine Wurzel CMakeLists.txt Datei, aber es funktioniert nicht.

CMake gibt keine Fehler zurück und alles baut gut, aber mein benutzerdefinierter Befehl ruft nicht auf. Wie kann ich nach jedem erfolgreichen Build in CMake etwas ausführen?

Update:

Meine letzte 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 nennt add_test und Testziel in einer Liste erinnert. Jeder Test in einem Projekt, der von dieser Funktion hinzugefügt wurde. 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 individuelle Ziel erstellt, die auf allen Unit-Tests in einem Projekt abhängt. Der benutzerdefinierte Befehl wird ausgeführt, nachdem das Ziel all_tests erstellt wurde.

+1

Danke für die Antwort - in Ihrem Makro, in 'add_test', ich glaube, Sie brauchen' $ {target_test} 'statt' target_test' – experquisite

Antwort

12

Diese Form der add_custom_command wird nur dann ausgeführt, wenn ein anderes CMake Ziel eine Abhängigkeit von „tests.txt“ hat. Ich nehme an, dass kein anderes Ziel "tests.txt" als Eingabedatei hat, daher wird der benutzerdefinierte Befehl nie ausgeführt.

Ich glaube, Sie die zweite Form des add_custom_command verwenden könnte Ihr Ziel zu erreichen; so etwas wie:

add_custom_command(TARGET MainTest 
        POST_BUILD 
        COMMAND ctest -C $<CONFIGURATION> --output-on-failure) 
+0

Vielen Dank für Antwort, dies zu schätzen wissen! Ich habe eine ähnliche Lösung gefunden. Ich erstelle individuelle Ziel, das im Projekt auf jedes Gerät zu testen hängt und als ich 'add_custom_command' mit meinem benutzerdefinierten Ziel als TARGET-Parameter. Dies ist wichtig, weil ich keine veralteten Tests durchführen möchte. Und ich finde auch heraus, dass es unmöglich ist, alle Ziele im 'cmake'-Projekt aufzuzählen, so dass die Liste der Ziele manuell gepflegt werden muss. – Lazin

Verwandte Themen