如何检测CMake变量是否是缓存变量?

时间:2019-01-21 19:07:42

标签: cmake

可以在if()内部使用哪种最简单的方法来检测给定的CMake变量名称是否是“缓存变量”而不是常规变量?

考虑以下示例:

set(regularVariable "some value")
set(aVariableInCache "some other value" CACHE INTERNAL "")

get_cmake_property(variables VARIABLES)
foreach(variable ${variables})
    if(???)
        ...
    endif()
endforeach()

我正在寻找一种简单的方法来区分regularVariableaVariableInCache,仅基于CMake高速缓存中的哪个以及只是常规变量的一个。

2 个答案:

答案 0 :(得分:3)

我想,你可以逃脱

get_property(result CACHE ${variable} PROPERTY TYPE)

result的空值表示该变量不存在于缓存中。

答案 1 :(得分:2)

自CMake 3.14起,if (DEFINED CACHE{var})可用。 https://cmake.org/cmake/help/latest/command/if.html

    set(var1 "not cached")
    if (DEFINED CACHE{var1})
        message("var1 is cache")
    else()
        message("var1 is not cache")
    endif()

    set(var2 "cached" CACHE INTERNAL "doc")
    if (DEFINED CACHE{var2})
        message("var2 is cache")
    else()
        message("var2 is not cache")
    endif()