假设我有以下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
)
如果msg
包含分号,例如"msg1;msg2"
,则实际命令将扩展为
git -a -m "msg1" "msg2" 1.0.0. HEAD
会导致语法错误。
我尝试使用\
来逃避;
,但无济于事。
我该怎么办?
答案 0 :(得分:12)
自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 "{}" \;
以下方式:
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}
)
请注意,使用separate_arguments不需要add_custom_command的VERBATIM参数。
答案 1 :(得分:0)
CMake使用分号管理列表,所以我认为没有比将消息写入文件和git tag -F file