2016-07-25 50 views
1

我有兩個宏名稱,例如:cmake的動態調用宏名

macro(my_macro1) 
# stuff only to use in this macro 
endmacro() 

macro(my_macro2) 
# stuff only to use in this macro 
endmacro() 

我想動態調用基於一個變量名宏,例如:

if (...) 
set (ver 1) 
else() 
set (ver 2) 
endif() 
my_macro${ver} # this is my idea 

任何幫幫我?

+1

的CMake不支持** dyna麥克風**功能/宏調用(我找不到鏈接到SO,但最近有關於此功能的問題)。 [這個相關的問題](http://stackoverflow.com/questions/23615436/invoke-macro-with-variable-name-in-cmake)描述類似於你的問題。 – Tsyvarev

回答

2

由於@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}) 
+0

感謝您的提示,按預期工作。 – Joel