Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:如何在ADD_CUSTOM_目标中输出分号(;)作为命令选项_Cmake - Fatal编程技术网

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

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

假设我有以下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
这会导致语法错误

我试图使用
\
来逃避
但无效


我该怎么办?

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.:-)但我想知道更通用的解决方案。