假设我有以下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参数.
| 归档时间: |
|
| 查看次数: |
3889 次 |
| 最近记录: |