有没有办法获得具有指定前缀的用户定义变量列表?例如:
set(vars_MyVar1 something)
set(vars_MyVar2 something)
getListOfVarsStartingWith(vars_)
Run Code Online (Sandbox Code Playgroud)
?
该功能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()
Run Code Online (Sandbox Code Playgroud)
这些函数使用CMake函数string(REGEX MATCHALL计算所有匹配的变量名称而无需循环.这是一个用法示例:
set(vars_MyVar1 something)
set(vars_MyVar2 something)
getListOfVarsStartingWith("vars_" matchedVars)
foreach (_var IN LISTS matchedVars)
message("${_var}=${${_var}}")
endforeach()
Run Code Online (Sandbox Code Playgroud)
如果搜索应仅返回缓存变量,请使用以下函数:
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()
Run Code Online (Sandbox Code Playgroud)
此功能查询CACHE_VARIABLES财产,还可以确保类型的缓存变量STATIC,它是使用CMake的内部,都没有回来.
| 归档时间: |
|
| 查看次数: |
4073 次 |
| 最近记录: |