サーチ…


備考

マクロ関数の主な違いは、 マクロは現在のコンテキスト内で評価され、 関数は現在のコンテキスト内で新しいスコープを開きます。したがって、 関数内で定義された変数は、関数が評価された後では認識されません。逆に、 マクロ内の変数は、マクロが評価された後も依然として定義されています。

入力に基づいて変数を定義する単純なマクロ

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

while

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