否定CMake中的布尔变量?

thi*_*wfx 5 cmake

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

set(foo TRUE)
Run Code Online (Sandbox Code Playgroud)

现在,我想定义一个bar具有相反布尔值的变量foo(换句话说:在这个上下文中,我希望barFALSE或者等价,false或者0).完成此操作的一种方法是:

if(foo)
    set(bar FALSE)
else()
    set(bar TRUE)
endif()
Run Code Online (Sandbox Code Playgroud)

但是,这有点冗长.如何用更少的线条完成同样的事情


笔记

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

set(bar $<NOT:${foo}>)
Run Code Online (Sandbox Code Playgroud)

甚至

set(bar $<NOT:foo>)
Run Code Online (Sandbox Code Playgroud)

不会产生预期的结果.

usr*_*567 7

没有办法计算表达式

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

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}")
Run Code Online (Sandbox Code Playgroud)

  • 在这个 [gist](https://gist.github.com/lukka/3efc3772b4c87d350424209172f0599e) 中另一个类似的否定函数的实现 (3认同)