调用宏在CMake的变量名(Invoke macro with variable name in C

2019-10-20 03:02发布

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

 macro(do_A x)
 endmacro()

 macro(do_B x)
 endmacro()

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

 C(asdf,A)

是否有任何机制做这样的事情?

编辑:这可能是更准确的问,你可以通过宏作为参数传递给另一个宏?

Answer 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)


文章来源: Invoke macro with variable name in Cmake
标签: cmake