Поиск…


замечания

Основное различие между макросами и функциями заключается в том, что макросы оцениваются в текущем контексте, а функции открывают новую область в текущем контексте. Таким образом, переменные, определенные внутри функций , не известны после того, как функция была оценена. Напротив, переменные внутри макросов все еще определены после оценки макроса.

Простой макрос для определения переменной на основе ввода

macro(set_my_variable _INPUT)
  if("${_INPUT}" STREQUAL "Foo")
    set(my_output_variable "foo")
  else()
    set(my_output_variable "bar")
  endif()
endmacro(set_my_variable)

Используйте макрос:

set_my_variable("Foo")
message(STATUS ${my_output_variable})

распечатает

-- foo

в то время как

set_my_variable("something else")
message(STATUS ${my_output_variable})

распечатает

-- bar

Макрос для заполнения переменной данного имени

macro(set_custom_variable _OUT_VAR)
  set(${_OUT_VAR} "Foo")
endmacro(set_custom_variable)

Используйте его с

set_custom_variable(my_foo)
message(STATUS ${my_foo})

который будет печатать

-- Foo


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow