我已经实现了一个方案,该方案使我能够检测用户是否更改了CACHE变量MY_VAR
,就像建议的here一样。由于存在许多依赖关系,因此我引入了一个新变量MY_VAR_CHANGED
,而不是在单个因变量上强制使用新值。要定义一个因变量,可以执行以下操作:
if( MY_VAR_CHANGED )
set( DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH "" FORCE )
else()
set( DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH "" )
endif()
我在许多不同的地方使用此代码,所以我想知道是否存在一种优雅的方式来有条件地包装FORCE,例如通过在c ++中使用类似? :
的语句。
答案 0 :(得分:1)
CMake缺少许多与“内联”计算有关的功能。相反,您可以始终创建所需的宏/函数封装行为:
# Straightforward macro, which removes code duplicates
macro(set_force_conditional cond_var)
if(${cond_var})
set(${ARGV} "" FORCE)
else()
set(${ARGV} "")
endif()
endmacro()
用法:
set_force_conditional(MY_VAR_CHANGED DEPENDENT_VAR "${MY_VAR}/ADDITIONAL_INFO" CACHE PATH)
(普通变量的取消引用会释放""
元素,因此宏会手动将空的文档字符串传递给set(CACHE)
命令)。