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