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") set(var3 "INIT3") block(PROPAGATE var1 var2) set(var1 "VALUE1") unset(var2) set(var3 "VALUE3") endblock() # Now var1 holds VALUE1, var2 is unset, and var3 holds the initial value INIT3
此选项仅在创建变量范围时允许。在其他情况下将引发错误。
当 block()
位于 foreach()
或 while()
命令内部时,break()
和 continue()
命令可以在块内部使用。
while(TRUE)
block()
...
# the break() command will terminate the while() command
break()
endblock()
endwhile()