否定CMake中的布尔变量?

时间:2017-01-20 22:09:58

标签: cmake

假设我在CMake中设置了以下变量:

set(foo TRUE)

现在,我想定义一个bar变量,其反向布尔值为foo(换句话说:在此上下文中,我希望barFALSE或等效的,如false0)。完成此任务的一种方法是:

if(foo)
    set(bar FALSE)
else()
    set(bar TRUE)
endif()

然而,这有点冗长。 如何用更少的行完成同样的事情

备注

我尝试使用生成器表达式,但它们似乎不适用于set命令:

set(bar $<NOT:${foo}>)

甚至

set(bar $<NOT:foo>)

不会产生预期的结果。

1 个答案:

答案 0 :(得分:4)

no way to evaluate an expression

如果您经常需要它,您可以编写辅助函数来处理反转。调用签名很笨拙,因为你必须传递变量名和它的值。

cmake_minimum_required(VERSION 3.0)
project(InvertFunction)

function (invertBoolean varName varValue)
  if(${varValue})
    set(${varName} false PARENT_SCOPE)
  else()
    set(${varName} true PARENT_SCOPE)
  endif()
endfunction()

set(foo true)
invertBoolean("foo" foo)
message("Invert foo: ${foo}")

set(bar false)
invertBoolean("bar" bar)
message("Invert bar: ${bar}")