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

标签 cmake

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

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/

相关文章:

c - 构建过程后如何在 cmake 中编译其他源文件

c++ - cmake 添加前缀到链接器

c++ - .sln 文件未生成

c++ - Cmake 找不到 Boost 文件夹

c++ - 使用 cmake 对共享库的 undefined reference

c++ - 如何在 MAC OS X 上的 CMAKE 项目中包含 C 静态库

c++ - 我的项目找不到一个库头,但找不到另一个

compiler-errors - 来自cmake的QQuickWindow上 undefined reference 错误

cmake - 如何从我自己的同名查找模块中执行CMake的默认查找模块?

c++ - 无需运行即可构建 CLion