2012-07-21 11 views
7

Supongamos que tengo la siguiente CMake fragmento:CMake: Cómo coma de salida (;) como opciones de comando en 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 
) 

Si msg contiene punto y coma como "msg1;msg2", entonces el comando real se expande para

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

que conduce a un error de sintaxis.

He intentado usar \ para escapar del ; pero fue en vano.

¿Qué debo hacer?

Respuesta

11

Hay una ficha especial desde 2.8.11 versión: $ <COMA> (http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:add_custom_command).

lo uso por ejemplo para tales comando Buscar:

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

la siguiente manera:

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} 
) 

Tenga en cuenta que no se necesita con separate_arguments parámetro textualmente para add_custom_command.

0

CMake lista con punto y coma gestiona, así que no veo mejor manera que sólo escribir el mensaje en un archivo y git tag -F file

+0

Es cierto. :-) Pero me gustaría saber más solución genérica. –

Cuestiones relacionadas