CMake:如何在ADD_CUSTOM_TARGET中输出分号(;)作为命令选项

Din*_*hen 10 cmake

假设我有以下CMake片段:

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
)
Run Code Online (Sandbox Code Playgroud)

如果msg包含分号"msg1;msg2",则将实际命令扩展为

git -a -m "msg1" "msg2" 1.0.0. HEAD
Run Code Online (Sandbox Code Playgroud)

这会导致语法错误.

我试图\逃避;但无济于事.

我该怎么办?

gsh*_*hep 13

自2.8.11版本以来有一个特殊令牌:$ <SEMICOLON>(http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:add_custom_command).

我用它作为例如这样的find命令:

find /path/to/search -name some\*name \! -path excluded\*Pattern -exec ln -sf "{}" \;
Run Code Online (Sandbox Code Playgroud)

以下方式:

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}
)
Run Code Online (Sandbox Code Playgroud)

请注意,使用separate_arguments不需要add_custom_command的VERBATIM参数.