获取具有指定前缀的变量列表

时间:2012-09-20 21:51:23

标签: cmake

有没有办法获得具有指定前缀的用户定义变量列表?例如:

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

2 个答案:

答案 0 :(得分:9)

函数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()

此函数查询CACHE_VARIABLES属性,并确保不返回STATIC类型的缓存变量,are used by CMake internally

答案 1 :(得分: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)