有没有办法获取具有指定前缀的用户定义变量列表?例如:
set(vars_MyVar1 something)
set(vars_MyVar2 something)
getListOfVarsStartingWith(vars_)
?
有没有办法获取具有指定前缀的用户定义变量列表?例如:
set(vars_MyVar1 something)
set(vars_MyVar2 something)
getListOfVarsStartingWith(vars_)
?
该函数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
属性并确保不返回CMake 内部使用STATIC
的类型缓存变量。
我不知道有什么功能可以做到这一点,但是您可以通过请求所有已定义的变量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)