Frage

Ich baue einige Tests mit CTest. Normalerweise kann ich den Test, indem Sie einfach die Zeile ein:

ADD_TEST(Test_Name executable args)

Allerdings habe ich auf ein Problem stoßen, ich habe einige Tests, die zwei Befehle benötigen, um es an die Arbeit ausgeführt werden soll, ist es eine Möglichkeit, zwei Programme in einem einzigen ctest ausführen können, oder bin ich verpflichtet, erstellen Sie einen neuen Test für jeden?

Danke.

War es hilfreich?

Lösung

Der add_test Befehl akzeptiert nur eine ausführbare Datei, aber Sie können eine beliebige ausführbare Datei ausführen, die wirklich ein Skript. Um dies zu tun in einer Cross-Plattform-Art und Weise, schreiben Sie das Skript in CMake selbst. CMake hat die -P Option für beliebige Stücke von CMake Skriptsprache ausgeführt wird, wenn Sie make oder make test laufen, anstatt bei Makefile Generationszeit.

Leider kann man nicht Argumente ein solches Skript übergeben. Aber Sie können Variablen auf Werte gesetzt, die genauso gut ist.

Dieses Skript Sie runtests.cmake nennen kann, läuft er die Befehle CMD1 und CMD2 und prüft, die jeweils für einen Nicht-Null-Return-Code, der Rückkehr aus CMake selbst mit einem Fehler, wenn das passiert:

macro(EXEC_CHECK CMD)
    execute_process(COMMAND ${CMD} RESULT_VARIABLE CMD_RESULT)
    if(CMD_RESULT)
        message(FATAL_ERROR "Error running ${CMD}")
    endif()
endmacro()
exec_check(${CMD1})
exec_check(${CMD2})

... und dann fügen Sie Ihre Testfälle wie folgt:

add_executable(test1 test1.c)
add_executable(test2 test2.c)
add_test(NAME test
    COMMAND ${CMAKE_COMMAND}
            -DCMD1=$<TARGET_FILE:test1>
            -DCMD2=$<TARGET_FILE:test2>
    -P ${CMAKE_CURRENT_SOURCE_DIR}/runtests.cmake)

$<TARGET_FILE:test1> wird auf den vollständigen Pfad zu der ausführbaren Datei zur Build-Datei Generationszeit erweitert. Wenn Sie make test oder gleichwertig laufen diese laufen „cmake -P runtests.cmake“ an die entsprechenden Prüfprogrammen die CMD1 und CMD2 Größen. Das Skript wird dann zwei Programme nacheinander auszuführen. Wenn entweder die Testprogramme scheitern, scheitert die gesamte Prüfung. Wenn Sie den Ausgang des Tests sehen, dann können Sie laufen make test ARGS=-V

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top