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