【问题标题】:CMake: How to output semicolon (;) as command options in ADD_CUSTOM_TARGETCMake:如何在 ADD_CUSTOM_TARGET 中将分号 (;) 作为命令选项输出
【发布时间】:2012-07-20 13:07:06
【问题描述】:

假设我有以下 CMake sn-p:

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


    【解决方案1】:

    从 2.8.11 版本开始有一个特殊的令牌:$ (http://www.cmake.org/cmake/help/v2.8.11/cmake.html#command:add_custom_command)。

    例如,我将它用于此类查找命令:

    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}
    )
    

    请注意,add_custom_command 的单独参数 VERBATIM 参数是不需要的。

    【讨论】:

      【解决方案2】:

      CMake 使用分号管理列表,所以我认为没有比将消息写入文件和git tag -F file 更好的方法

      【讨论】:

      • 是的。 :-) 但我想知道更通用的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-28
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      相关资源
      最近更新 更多