Как написать хорошую функцию, которая передает переменные по ссылке?
как в названии в названии, я хотел бы написать "приятную" функцию в cmake, которая может модифицировать переменную, которая передается в качестве параметра в эту функцию.
Единственный способ, которым я могу это сделать, - уродливо:
Определение функции
function(twice varValue varName)
set(${varName} ${varValue}${varValue} PARENT_SCOPE)
endfunction(twice)
Использование
set(arg foo)
twice(${arg} arg)
message("arg = "${arg})
Результат
arg = foofoo
Мне кажется, нет реального понятия переменных, которое можно вообще пропустить?!
Я чувствую, что есть что-то фундаментальное в отношении cmake, которое я еще не принял.
Итак, есть ли лучший способ сделать это?
Спасибо большое!
Ответы
Ответ 1
Вам не нужно передавать значение и имя переменной. Имя достаточно, потому что вы можете получить доступ к значению по имени:
function(twice varName)
SET(${varName} ${${varName}}${${varName}} PARENT_SCOPE)
endfunction()
SET(arg "foo")
twice(arg)
MESSAGE(STATUS ${arg})
выводит "foofoo"
Ответ 2
Я использую эти два макроса для отладки:
macro(debug msg)
message(STATUS "DEBUG ${msg}")
endmacro()
macro(debugValue variableName)
debug("${variableName}=\${${variableName}}")
endmacro()
Использование:
set(MyFoo "MyFoo value")
debugValue(MyFoo)
Вывод:
MyFoo=MyFoo value