在Cmake中调用带有变量名的宏

时间:2014-05-12 17:40:37

标签: cmake

我希望能够做到这一点(如果可能的话(试图获取伪多态/函数传递以避免复制粘贴))

 macro(do_A x)
 endmacro()

 macro(do_B x)
 endmacro()

 macro(C y x)
 do_${x}(y)
 endmacro()

 C(asdf,A)

有没有机制做这样的事情?

编辑:问题可能更准确,你可以将宏作为参数传递给另一个宏吗?

1 个答案:

答案 0 :(得分:1)

我不确定是否有更好的方法,但您可以在这里使用configure_fileinclude作为帮助。

因此,如果您创建一个名为“macro_helper.cmake.in”的输入文件,并将其内容作为以下行:

@MacroName@(MacroArg)

然后你可以将它配置为每个宏的输出文件,然后只需include输出文件:

macro(C MacroArg MacroId)
  set(MacroName do_${MacroId})
  # Need to make MacroArg a "proper" variable since we're in a macro, not a
  # function.  Run 'cmake --help-command macro' for more info.
  set(MacroArg ${MacroArg})
  set(OutputFile ${CMAKE_BINARY_DIR}/helpers/macro_helper_${MacroId}.cmake)
  configure_file(macro_helper.cmake.in ${OutputFile} @ONLY)
  include(${OutputFile})
endmacro()

注意:在调用C时不需要逗号 - 只需执行:

C(asdf A)