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