我希望能够做到这一点(如果可能的话(试图让伪多态性/函数传递,避免复制粘贴))
macro(do_A x)
endmacro()
macro(do_B x)
endmacro()
macro(C y x)
do_${x}(y)
endmacro()
C(asdf,A)
是否有任何机制做这样的事情?
编辑:这可能是更准确的问,你可以通过宏作为参数传递给另一个宏?
我希望能够做到这一点(如果可能的话(试图让伪多态性/函数传递,避免复制粘贴))
macro(do_A x)
endmacro()
macro(do_B x)
endmacro()
macro(C y x)
do_${x}(y)
endmacro()
C(asdf,A)
是否有任何机制做这样的事情?
编辑:这可能是更准确的问,你可以通过宏作为参数传递给另一个宏?
我不知道是否有更好的方法,但你可以使用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)