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

參見