Значение $ {$ {arg}} в CMake?

#cmake

#cmake

Вопрос:

Я ищу объяснение следующей функции в CMake:

 function(file_grab src arg)
file(GLOB_RECURSE ${arg} CONFIGURE_DEPENDS
 ${src}/*.cc
 ${src}/*.hpp
)
set(${arg} ${${arg}} PARENT_SCOPE)
endfunction(file_grab)
  

Насколько я понимаю, мы используем filesystem и рекурсивно захватываем все файлы с *.cc *.hpp расширением и и устанавливаем его в arg переменную.
Чего я не понимаю, так это

 set(${arg} ${${arg}} PARENT_SCOPE)
  

Я понимаю, что первый аргумент заключается в том, чтобы установить все, что ${${arg}} относится к arg переменной in PARENT_SCOPE . Что означает вложенный ${${arg}} ?

Ответ №1:

${${arg}} является вложенной ссылкой на переменную, см. Ссылки на переменные.

Как объясняется в документации, он оценивается изнутри. В вашем случае значение ${arg} используется как имя переменной и само вычисляется.

Пример

 set(foo "42")
set(arg "foo")
message(STATUS "${${arg}}")
  

будет напечатано 42 .

Комментарии:

1. Спасибо, именно то, что я искал.