Der Befehl add_test
akzeptiert nur eine ausführbare Datei, aber Sie können jede ausführbare Datei ausführen, die wirklich ein Skript ist. Um dies plattformübergreifend zu tun, schreibe das Skript in CMake selbst. CMake verfügt über die -P
Option zum Ausführen beliebiger Abschnitte der CMake-Skriptsprache, wenn Sie make
oder make test
statt zur Makefile-Generierungszeit ausführen.
Leider können Sie einem solchen Skript keine Argumente übergeben. Aber Sie können Variablen auf Werte setzen, was 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, aus CMake Rückkehr 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 Testfälle wie so hinzufügen:
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>
auf den vollständigen Pfad zu der ausführbaren Datei zur Build-Datei Generation Zeit erweitert wird. Wenn Sie make test
oder gleichwertig ausführen, wird "cmake -P rottests.cmake" ausgeführt, und die CMD1- und CMD2-Variablen werden auf die entsprechenden Testprogramme gesetzt. Das Skript führt dann Ihre 2 Programme nacheinander aus. Wenn eines der Testprogramme fehlschlägt, schlägt der gesamte Test fehl. Wenn Sie die Ausgabe des Tests sehen müssen, können Sie make test ARGS=-V
Hmm ... das sieht gut aus, obwohl ich das Skript während der Testzeit ausgeführt werden muss, nicht bauen Zeit oder makefile Generierungszeit. –
Oh, mit "Build-Zeit" meinte ich, wenn Sie irgendeinen 'make'-Befehl ausführen, einschließlich' make test'. Im Gegensatz dazu, wenn Sie 'cmake' ausführen, um die Makefiles zu generieren. Das habe ich jetzt in der Antwort geklärt. – richq