2010-06-17 7 views
11

CTest를 사용하여 일부 테스트를 빌드하고 있습니다. 일반적으로, 나는 단순히 선으로 테스트를 설정할 수 있습니다여러 명령을 사용하는 CTest

ADD_TEST(Test_Name executable args) 

는 그러나, 나는이 문제로 실행했습니다, 나는 두 명령을 필요로하는 일부 테스트가 작동하기 위해서는 실행되어야한다,이 어떤 방법 으로든 하나의 ctest에서 두 개의 프로그램을 실행할 수 있습니까? 아니면 각각에 대해 새 테스트를 만들어야합니까?

감사합니다.

답변

14

명령은 하나의 실행 파일 만 허용하지만 실제로는 스크립트 인 실행 파일을 실행할 수 있습니다. 이것을 크로스 플랫폼 방식으로 수행하려면 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

+0

흠 ... 테스트 시간에 스크립트를 실행해야하지만 시간이나 메이크 파일 생성 시간을 늘리지 않아도됩니다. –

+0

오, "빌드 타임"이란'make test '를 포함하여'make' 명령을 실행할 때를 의미합니다. 마찬가지로'cmake'를 실행하여 Makefile을 생성하는 것과 반대입니다. 나는 대답에서 그것을 분명히했다. – richq