將CMake中的列表加入字符串的最佳方式是什麼?在CMake中加入列表的最佳/最簡單的方法
通過加入我的意思是轉換SET(somelist「a」「b」「c \; c」)到「a:b:c; c」粘膠字符串(「:」)可以選擇。下面的代碼有效,但它真的很長,有沒有更好的方法?
FUNCTION(JOIN LISTNAME GLUE OUTPUT)
SET(_TMP_STR "")
FOREACH(VAL ${${LISTNAME}})
SET(_TMP_STR "${_TMP_STR}${GLUE}${VAL}")
ENDFOREACH(VAL ${${LISTNAME}})
STRING(LENGTH "${GLUE}" GLUE_LEN)
STRING(LENGTH "${_TMP_STR}" OUT_LEN)
MATH(EXPR OUT_LEN ${OUT_LEN}-${GLUE_LEN})
STRING(SUBSTRING "${_TMP_STR}" ${GLUE_LEN} ${OUT_LEN} _TMP_STR)
SET(${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
ENDFUNCTION()
#USAGE:
SET(somelist "a" "b" "c\;c")
JOIN(somelist ":" output)
MESSAGE("${output}") # will output "a:b:c;c"
不幸的是使用STRING(REPLACE ...)不工作:
function(JOINSTRREPLACE VALUES GLUE OUTPUT)
string (REPLACE ";" "${GLUE}" _TMP_STR "${VALUES}")
set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE)
endfunction()
JOINSTRREPLACE("${somelist}" ":" output)
MESSAGE(${output}) # will output "a:b:c\:c"
哦,是的,謝謝,這工作。但是這是否意味着我不能擁有一個元素包含分號的列表? – Geli
我更新了問題以包含一個含有分號的元素的列表。 – Geli
您原來的函數JOIN也無法處理分號。它使用cmake 2.8.5在Windows下輸出「a:b:cc」。 – sakra