명령은 하나의 실행 파일 만 허용하지만 실제로는 스크립트 인 실행 파일을 실행할 수 있습니다. 이것을 크로스 플랫폼 방식으로 수행하려면 CMake 자체에 스크립트를 작성하십시오. CMake는 Makefile 생성 시간이 아닌 make
또는 make test
을 실행할 때 CMake 스크립팅 언어의 임의의 덩어리를 실행하기위한 -P
옵션을 가지고 있습니다.
슬프게도 그러한 스크립트에 인수를 전달할 수 없습니다. 하지만 변수를 값으로 설정할 수 있습니다.
이 스크립트는 runtests.cmake
를 호출 할 수 있습니다, 그것은 명령 CMD1 및 CMD2 및 검사 그렇게하면 오류와 CMake 자체에서 반환 0이 아닌 리턴 코드에 대한 각 실행 :
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
또는 이와 동등한 것을 실행하면 CMD1 및 CMD2 변수를 적절한 테스트 프로그램에 설정하는 "cmake -P runtests.cmake"가 실행됩니다. 그러면 스크립트가 2 개의 프로그램을 순서대로 실행합니다. 테스트 프로그램 중 하나가 실패하면 전체 테스트가 실패합니다. 테스트 결과를 볼 필요가 있다면
make test ARGS=-V
흠 ... 테스트 시간에 스크립트를 실행해야하지만 시간이나 메이크 파일 생성 시간을 늘리지 않아도됩니다. –
오, "빌드 타임"이란'make test '를 포함하여'make' 명령을 실행할 때를 의미합니다. 마찬가지로'cmake'를 실행하여 Makefile을 생성하는 것과 반대입니다. 나는 대답에서 그것을 분명히했다. – richq