Команда add_test
принимает только один исполняемый файл, но вы можете запустить любой исполняемый файл, который действительно является скриптом.Чтобы сделать это кроссплатформенным способом, напишите скрипт на самом CMake.CMake имеет опцию -P
для запуска произвольных кусков языка сценариев CMake при запуске make
или make test
, а не во время генерации Makefile.
К сожалению, вы не можете передать аргументы такому скрипту,Но вы можете установить переменные в значения, что также хорошо.
Этот скрипт вы можете вызвать 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 для соответствующих тестовых программ.Затем скрипт выполнит две ваши программы по очереди.Если одна из тестовых программ не пройдена, весь тест не пройден.Если вам нужно увидеть результаты теста, вы можете запустить make test ARGS=-V