13

次の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

これは構文エラーにつながります。

私は\逃げるために使用しようとしました;が、役に立ちませんでした。

私は何をすべきか?

4

2 に答える 2

16

2.8.11バージョン以降の特別なトークンがあります:$ <SEMICOLON>(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パラメーターは必要ないことに注意してください。

于 2013-09-14T18:36:48.133 に答える
0

CMakeはセミコロンを使用してリストを管理するので、ファイルにメッセージを書き込む以外に良い方法はありません。git tag -F file

于 2012-07-23T05:22:48.847 に答える