CMake:复制字符串列表有多深

时间:2018-05-16 19:21:27

标签: cmake

当我使用set来复制字符串列表时,我得到一个引用而不是深层副本,因为当我从新的列表变量中删除一些项目时,元素也会从原始列表中删除。

我的代码如下所示:

set(NEW_LIST ${TARGET_NAME}_SRC_FILES)
message("new list content1    : ${${NEW_LIST}}")
list(REMOVE_ITEM ${NEW_LIST} ${${TARGET_NAME}_LIN64_EXCLUDED_SRC_FILES})
message("new list content2    : ${${NEW_LIST}}")
message("original list content: ${${TARGET_NAME}_SRC_FILES}")

首次打印在删除之前给出完整列表,后面的内容更短且相同。

我正在寻找一些不会改变原始列表的东西。

编辑: 我更新了上面的代码片段,列表填充如下:

set( ${TARGET_NAME}_SRC_FILES
     foo.cpp
     foo2.cpp)

1 个答案:

答案 0 :(得分:1)

操作

set(NEW_LIST ${TARGET_NAME}_SRC_FILES)

NEW_LIST变量分配给变量名称 ${TARGET_NAME}_SRC_FILES

所以<{>} 取消引用NEW_LIST会返回${TARGET_NAME}_SRC_FILES变量的值。

# Prints value of '${TARGET_NAME}_SRC_FILES' variable.
message("new list content1: ${${NEW_LIST}}")

要将一个变量的值赋值给另一个变量,您需要取消引用该变量:

 set(NEW_LIST ${${TARGET_NAME}_SRC_FILES})
 # Now NEW_LIST variable contains current value of '${TARGET_NAME}_SRC_FILES' one.
 # Possibly modify '${TARGET_NAME}_SRC_FILES' variable...
 # ... but content of NEW_LIST variable remains the same
 message("new list content1: ${NEW_LIST}")