Jaki jest najlepszy sposób dołączenia do listy w CMake w ciągu znaków?Najlepszy/Najkrótszy sposób na dołączenie do listy w CMake
Przystępując mam na myśli przekonwertować SET (somelist "a" "b" "c \; c") na "a: b: c; c", gdzie ciąg klej (":") jest do wybrania. Poniższy kod działa, ale jest NAPRAWDĘ długi, czy istnieje lepszy sposób?
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"
Niestety używając String (REPLACE ...) nie działa:
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"
Aha dzięki, to działa. Ale czy to oznacza, że nie mogę mieć listy, w której element zawiera średnik? – Geli
Zaktualizowałem pytanie, dodając listę zawierającą elementy, które zawierają średniki. – Geli
Twoja oryginalna funkcja JOIN również nie radzi sobie ze średnikami. Wyprowadza "a: b: cc" pod Windows z cmake 2.8.5. – sakra