block

在版本 3.25 中添加。

使用专用的变量和/或策略作用域评估一组命令。

block([SCOPE_FOR [POLICIES] [VARIABLES]] [PROPAGATE <var-name>...])
  <commands>
endblock()

block() 和匹配的 endblock() 之间的所有命令都会被记录下来,但不会被调用。一旦 endblock() 被评估,记录的命令列表将在请求的作用域内被调用,然后由 block() 命令创建的作用域将被移除。

SCOPE_FOR

指定必须创建的作用域。

POLICIES

创建一个新的策略作用域。这等效于 cmake_policy(PUSH),并在离开 block 作用域时自动执行 cmake_policy(POP)

VARIABLES

创建一个新的变量作用域。

如果未指定 SCOPE_FOR,则等效于

block(SCOPE_FOR VARIABLES POLICIES)
PROPAGATE

当变量作用域由 block() 命令创建时,此选项在父作用域中设置或取消设置指定的变量。这等效于 set(PARENT_SCOPE)unset(PARENT_SCOPE) 命令。

set(var1 "INIT1")
set(var2 "INIT2")

block(PROPAGATE var1 var2)
  set(var1 "VALUE1")
  unset(var2)
endblock()

# Now var1 holds VALUE1, and var2 is unset

仅当创建变量作用域时才允许使用此选项。在其他情况下会引发错误。

block() 位于 foreach()while() 命令内部时,可以在 block 内部使用 break()continue() 命令。

while(TRUE)
  block()
     ...
     # the break() command will terminate the while() command
     break()
  endblock()
endwhile()

参见