当我使用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)
答案 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}")