由於@Tsyvarev評論CMake不支持動態函數名稱。因此,這裏有一些替代方案:
簡單方法
macro(my_macro ver)
if(${ver} EQUAL 1)
my_macro1()
elseif(${ver} EQUAL 2)
my_macro2()
else()
message(FATAL_ERROR "Unsupported macro")
endif()
endmacro()
set(ver 1)
my_macro(ver)
set(ver 2)
my_macro(ver)
這裏的一個call()
功能實現
大廈@Fraser work是一個比較通用的call()
功能實現:
function(call _id)
if (NOT COMMAND ${_id})
message(FATAL_ERROR "Unsupported function/macro \"${_id}\"")
else()
set(_helper "${CMAKE_BINARY_DIR}/helpers/macro_helper_${_id}.cmake")
if (NOT EXISTS "${_helper}")
file(WRITE "${_helper}" "${_id}(\$\{ARGN\})\n")
endif()
include("${_helper}")
endif()
endfunction()
set(ver 1)
call(my_macro${ver})
set(ver 2)
call(my_macro${ver})
的CMake不支持** dyna麥克風**功能/宏調用(我找不到鏈接到SO,但最近有關於此功能的問題)。 [這個相關的問題](http://stackoverflow.com/questions/23615436/invoke-macro-with-variable-name-in-cmake)描述類似於你的問題。 – Tsyvarev