2012-07-21 66 views
7

假設我有以下CMake的片段:CMake的:如何輸出分號(;)在ADD_CUSTOM_TARGET命令選項

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 

這會導致語法錯誤。

我試圖用\來逃脫;但無濟於事。

我該怎麼辦?

回答

11

有一個特殊的記號,因爲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 "{}" \; 

方式如下:

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與separate_arguments逐字參數。

0

CMake的管理使用分號名單,所以我看不出有什麼更好的辦法不是僅僅寫文件的消息和git tag -F file

+0

是的。 :-)但我想知道更通用的解決方案。 – 2012-07-23 07:04:02

相關問題