有没有办法获取具有指定前缀的用户定义变量列表?例如:
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
属性,并确保缓存 STATIC
类型的变量, 其中 are used by CMake internally ,不退。
关于cmake - 获取具有指定前缀的变量列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12521452/