block

在 3.25 版本中添加。

评估一组命令的专用变量和/或策略范围。

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

介于 block() 和匹配的 endblock() 之间的所有命令都被记录下来而没有被调用。一旦评估 endblock(),则在请求的范围中调用记录的命令列表,然后删除 block() 命令创建的范围。

SCOPE_FOR

指定哪些范围必须被创建。

POLICIES

创建新的策略范围。这等效于 cmake_policy(PUSH),其中 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()命令中时,可以在块中使用break()continue()命令。

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

另请参阅