可以在if()
内部使用哪种最简单的方法来检测给定的CMake变量名称是否是“缓存变量”而不是常规变量?
考虑以下示例:
set(regularVariable "some value")
set(aVariableInCache "some other value" CACHE INTERNAL "")
get_cmake_property(variables VARIABLES)
foreach(variable ${variables})
if(???)
...
endif()
endforeach()
我正在寻找一种简单的方法来区分regularVariable
和aVariableInCache
,仅基于CMake高速缓存中的哪个以及只是常规变量的一个。
答案 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()