在CMake中如何取反布尔变量?

14
假设我在CMake中设置以下变量:
set(foo TRUE)

现在,我想用相反的布尔值来定义一个名为bar的变量(换句话说,在这个上下文中,我希望barFALSE,或者等同于false0)。其中一种完成方法是:

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

然而,这有点啰嗦。我该如何用更少的行实现相同的功能


注释

我尝试使用生成器表达式,但它们似乎在set命令中不起作用:

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

甚至或者更多

set(bar $<NOT:foo>)

无法产生所期望的结果。


你介意接受其中一个答案吗? - usr1234567
1个回答

8

无法评估表达式(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}")

3
类似的取反函数的另一个实现在这个gist中。 - Luca Cappa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接