Подтвердить что ты не робот

Как написать хорошую функцию, которая передает переменные по ссылке?

как в названии в названии, я хотел бы написать "приятную" функцию в 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, которое я еще не принял.

Итак, есть ли лучший способ сделать это?

Спасибо большое!

4b9b3361

Ответ 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