2013-03-10 2 views
9

add_custom_command에 의해 호출 된 명령의 반환 값을 얻는 방법은 무엇입니까? CMake add_custom_command에서 반환 값을 캐치 하시겠습니까?

는 내가 같은 것을 할 수 있다고 생각,

macro(mac param1) 
    execute_process(COMMAND process ${param1} RESULT_VARIABLE res_var) 
    if(${res_var} .... 

endmacro(mac) 

add_custom_command(COMMAND mac(param1)) 

하지만이 작동하지 않습니다. 나는 심지어 평야라고 알았다.

macro(mac) 
endmacro() 

add_custom_command(COMMAND mac()) 

does not work. 내가 매크로를 사용하지만 add_custom_command 자체 execute_process를 호출하지 않는 경우,

/bin/sh: 1: Syntax error: end of file unexpected 

또는 :

/bin/sh: 1: Syntax error: word unexpected (expecting ")") 

을 나는 add_custom_command가 매크로 나 내장 기능을 기대하지 않는 것 같아요 구축되면, 쉬 불평 통과 되라. 그러나, add_custom_command에서 명령의 반환 값을 얻으려면 어떻게해야합니까? 또는 덜 구체적으로, add_custom_command의 명령이 실패했다는 것을 어떻게 알 수 있습니까?

답변

14

add_custom_command에 의해 실행되는 명령은 빌드 시간까지 실행되지 않으므로 CMake의 configure/generate 단계에서 실패했다는 사실을 "catch"할 수 없습니다.

커스텀 커맨드가 실패하면, 커스텀 커맨드의 출력에 의존하는 것은 피할 수 있습니다. 왜냐하면 make는 그 이후에 멈추거나 make가 에러를 계속 수행하기 때문에 결과적으로 결론적으로 오류를 반환 할 것이고, 어떤 종류의 "실패한 빌드"메시지를 보냅니다.

항상 사용자 지정 명령으로 실행되는 동일한 스크립트를 작성한 다음 해당 스크립트에서 특정 유형의 오류가 발생한 후에 수행 할 수 있습니다. cmake를 -P 스크립트 처리 모드에서 사용하는 경우 execute_process를 호출하고 반환 값을 분석하는 교차 플랫폼 스크립트를 만들 수 있습니다. script.cmake.in에서

configure_file(
    ${CMAKE_CURRENT_SOURCE_DIR}/script.cmake.in 
    ${CMAKE_CURRENT_BINARY_DIR}/script.cmake 
    COPYONLY 
) 
add_custom_command(COMMAND ${CMAKE_COMMAND} -P 
    ${CMAKE_CURRENT_BINARY_DIR}/script.cmake 
) 

그리고 : : 예를 들어

execute_process(COMMAND process param1 RESULT_VARIABLE res_var) 
if(NOT "${res_var}" STREQUAL "0") 
    # do something here about the failed "process" call... 
    message(FATAL_ERROR "process failed res_var='${res_var}'") 
endif() 
+0

항상 함께'configure_file' :-) – Fraser

+0

의 유용하는 경우, 그것을 사용 ... -) – DLRdave

+0

좋아 보인다! 나는 내일 그것을 시험 할 것이다. –

관련 문제