Ответ 1
Команда add_test
принимает только один исполняемый файл, но вы можете запустить любой исполняемый файл, который действительно является script. Чтобы сделать это кросс-платформенным способом, напишите script в самом CMake. CMake имеет параметр -P
для запуска произвольных фрагментов языка сценариев CMake при запуске make
или make test
, а не во время генерации Makefile.
К сожалению, вы не можете передавать аргументы для такого script. Но вы можете установить переменные в значения, что так же хорошо.
Этот script вы можете вызвать runtests.cmake
, он запускает команды CMD1 и CMD2 и проверяет каждый из них на ненулевой код возврата, возвращая из CMake сам с ошибкой, если это произойдет:
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})
... и затем добавьте тестовые примеры следующим образом:
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>
расширяется до полного пути к исполняемому файлу в момент генерации файла сборки. Когда вы запустите make test
или эквивалент, это запустит "cmake -P runtests.cmake", установив переменные CMD1 и CMD2 в соответствующие тестовые программы. После этого script выполнит ваши 2 программы в последовательности. Если одна из тестовых программ завершилась неудачей, весь тест завершился неудачно. Если вам нужно увидеть результат теста, вы можете запустить make test ARGS=-V