Рассмотрим эти две строки:
set(${_input_list} "${_new_list}" PARENT_SCOPE)
message(STATUS "Revised input: ${_input_list}")
${_input_list}
заменяется его значением.Здесь команда set
создает переменную one
в родительской области, поскольку one
является первым элементом _input_list
.
. Чтобы изменить исходный список, необходимо передать его имя., не значение:
function(prepend_number _list_var)
foreach(_item ${${_list_var}})
list(APPEND _new_list "number_${_item}")
endforeach()
message(STATUS "Input var: ${_list_var}")
message(STATUS "Input: ${${_list_var}}")
set(${_list_var} "${_new_list}" PARENT_SCOPE)
endfunction()
set(numbers one two three four five)
set(numbers "5" "6" "7")
prepend_number(numbers)
message(STATUS "${numbers}")
Обратите внимание, что _list_var
выше - это строка, содержащая имя исходной переменной, а не ее значение.По этой причине я использую синтаксис ${${_list_var}}
для доступа к элементам.
По той же причине, когда я вызываю prepend_numbers
, я передаю numbers
вместо ${numbers}
.
Строковое печатание в худшем виде: (