CMake: насколько глубоко копировать список строк - PullRequest
0 голосов
/ 16 мая 2018

Когда я использую 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 голосов
/ 17 мая 2018

Операция

set(NEW_LIST ${TARGET_NAME}_SRC_FILES)

присваивает NEW_LIST переменную имени переменной ${TARGET_NAME}_SRC_FILES.

То есть double разыменование 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}")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...