Is there a way to get a list of user-defined variables that have a specified prefix? For example:
set(vars_MyVar1 something)
set(vars_MyVar2 something)
getListOfVarsStartingWith(vars_)
?
The function getListOfVarsStartingWith
can be written in the following way:
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()
The functions uses the CMake function string(REGEX MATCHALL
to compute all matched variable names without a loop. Here is a usage example:
set(vars_MyVar1 something)
set(vars_MyVar2 something)
getListOfVarsStartingWith("vars_" matchedVars)
foreach (_var IN LISTS matchedVars)
message("${_var}=${${_var}}")
endforeach()
If the search should only return cache variables, use the following function:
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()
This function queries the CACHE_VARIABLES
property and also makes sure that cache variables of type STATIC
, which are used by CMake internally, are not returned.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With