在CMake中实现条件FORCE

时间:2018-06-28 20:59:00

标签: c++ cmake

我已经实现了一个方案,该方案使我能够检测用户是否更改了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 ++中使用类似? :的语句。

1 个答案:

答案 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)命令)。