8

指定されたプレフィックスを持つユーザー定義変数のリストを取得する方法はありますか?例えば:

set(vars_MyVar1 something)
set(vars_MyVar2 something)
getListOfVarsStartingWith(vars_)

4

2 に答える 2

10

関数getListOfVarsStartingWithは次のように記述できます。

function (getListOfVarsStartingWith _prefix _varResult)
    get_cmake_property(_vars VARIABLES)
    string (REGEX MATCHALL "(^|;)${_prefix}[A-Za-z0-9_]*" _matchedVars "${_vars}")
    set (${_varResult} ${_matchedVars} PARENT_SCOPE)
endfunction()

関数は CMake 関数string(REGEX MATCHALLを使用して、一致するすべての変数名をループなしで計算します。使用例を次に示します。

set(vars_MyVar1 something)
set(vars_MyVar2 something)
getListOfVarsStartingWith("vars_" matchedVars)
foreach (_var IN LISTS matchedVars)
    message("${_var}=${${_var}}")
endforeach()

検索でキャッシュ変数のみを返す必要がある場合は、次の関数を使用します。

function (getListOfVarsStartingWith _prefix _varResult)
    get_cmake_property(_vars CACHE_VARIABLES)
    string (REGEX MATCHALL "(^|;)${_prefix}[A-Za-z0-9_]*" _matchedVars "${_vars}")
    set (_resultVars "")
    foreach (_variable ${_matchedVars})
        get_property(_type CACHE "${_variable}" PROPERTY TYPE)
        if (NOT "${_type}" STREQUAL "STATIC") 
            list (APPEND _resultVars "${_variable}")
        endif()
    endforeach()
    set (${_varResult} ${_resultVars} PARENT_SCOPE)
endfunction()

この関数はプロパティを照会し、CMake によって内部的に使用されるtypeのCACHE_VARIABLESキャッシュ変数が返されないようにします。STATIC

于 2012-09-21T08:22:00.490 に答える
0

それを行う関数はわかりませんが、定義されたすべての変数を要求GET_CMAKE_PROPERTYし、正規表現でリストをフィルタリングすることで、自分で簡単に作成できます。

例えば:

SET(my_prefix_var1 "bob1")
SET(my_prefix_var2 "bob2")

# Get all variables
GET_CMAKE_PROPERTY(vars VARIABLES)

# Filter by prefix and build the "res" list
FOREACH(var ${vars})
    STRING(REGEX MATCH "^my_prefix" item ${var})
    IF(item)
        LIST(APPEND res ${var})
    ENDIF(item)
ENDFOREACH(var)
于 2012-09-21T08:01:57.497 に答える