CMake:如何在ADD_CUSTOM_目标中输出分号(;)作为命令选项
假设我有以下CMake片段:CMake:如何在ADD_CUSTOM_目标中输出分号(;)作为命令选项,cmake,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
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
这会导致语法错误
我试图使用\
来逃避代码>但无效
我该怎么办?CMake使用分号管理列表,因此我认为没有比将消息写入文件和git tag-F文件更好的方法了。
自2.8.11版本以来,有一个特殊的标记:$()
例如,我将其用于这样的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}
)
set(
查找参数
“${SEARCH\u PATH}-命名某些\\*名称\\!-路径排除\\*模式-exec ln-sf{}\\$”
)
单独的参数(查找参数)
添加自定义命令(目标${PROJECT}
后期构建
命令“find”${find_ARGUMENTS}
工作目录${工作路径}
)
请注意,使用单独的参数时,不需要添加自定义命令的逐字逐句参数。True.:-)但我想知道更通用的解决方案。