2012-07-21 3 views
7

한다고 가정 나는 다음과 같은 CMake 조각 한 같은 : msg는 세미콜론과 같은 "msg1;msg2"을 포함CMake : 어떻게 출력 세미콜론 (;) ADD_CUSTOM_TARGET의 명령 옵션

MACRO(ADD_CUSTOM_TARGET_COMMAND tag OUTPUT file) 
    ADD_CUSTOM_TARGET(tag 
     ${ARGN} 
    ) 

    ADD_CUSTOM_TARGET(OUTPUT file 
     ${ARGN} 
    ) 
ENDMACRO() 

ADD_CUSTOM_TARGET_COMMAND(tag 
    OUTPUT file 
    COMMAND git tag -a -m "${msg}" 1.0.0 HEAD 
    VERBATIM 
) 

경우는, 다음 실제 명령이 확장

git -a -m "msg1" "msg2" 1.0.0. HEAD 

구문 오류가 발생합니다.

나는 ;을 탈출하기 위해 \을 사용하려고 시도했지만 아무 소용이 없습니다.

어떻게해야합니까?

답변

11

특별한 토큰이 있습니다를 쓰는 것보다 더 좋은 방법을 볼 수 없기 때문에 2.8.11 버전 : $ <SEMICOLON> (http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:add_custom_command).

나는 그런 찾을 명령에 대해 예를 들어, 사용 :

find /path/to/search -name some\*name \! -path excluded\*Pattern -exec ln -sf "{}" \; 

다음과 같은 방법 : add_custom_command에 대한 separate_arguments에 그대로 매개 변수가 필요하지 않은 것을

set(
    FIND_ARGUMENTS 
    "${SEARCH_PATH} -name some\\*name \\! -path exclued\\*Pattern -exec ln -sf {} \\$<SEMICOLON>" 
) 

separate_arguments(FIND_ARGUMENTS) 

add_custom_command(TARGET ${PROJECT} 
    POST_BUILD 
    COMMAND "find" ${FIND_ARGUMENTS} 
    WORKING_DIRECTORY ${WORKING_PATH} 
) 

참고.

0

CMake는 세미콜론을 사용하여 목록을 관리, 그래서 난 그냥 파일에 메시지 git tag -F file

+0

참. :-)하지만 좀 더 일반적인 해결책을 알고 싶습니다. –