我希望能够做到这一点(如果可能的话(试图获取伪多态/函数传递以避免复制粘贴))
macro(do_A x)
endmacro()
macro(do_B x)
endmacro()
macro(C y x)
do_${x}(y)
endmacro()
C(asdf,A)
有没有机制做这样的事情?
编辑:问题可能更准确,你可以将宏作为参数传递给另一个宏吗?
答案 0 :(得分:1)
我不确定是否有更好的方法,但您可以在这里使用configure_file
和include
作为帮助。
因此,如果您创建一个名为“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)