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()