相关疑难解决方法(0)

何时引用变量?

我是第一次写CMake宏,我很难理解变量是如何工作的.最具体地说,${a}似乎有不同的含义"${a}".

例如:将列表传递给cmake宏

我无法理解何时应该添加引号,以及更重要的基本原则是什么.

variables macros cmake

32
推荐指数
1
解决办法
1万
查看次数

加入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"
Run Code Online (Sandbox Code Playgroud)

不幸的是使用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"
Run Code Online (Sandbox Code Playgroud)

join list cmake

15
推荐指数
4
解决办法
1万
查看次数

标签 统计

cmake ×2

join ×1

list ×1

macros ×1

variables ×1