block

New in version 3.25.

Evaluate a group of commands with a dedicated variable and/or policy scope.

block([SCOPE_FOR [POLICIES] [VARIABLES] ] [PROPAGATE <var-name>...])
  <commands>
endblock()

All commands between block() and the matching endblock() are recorded without being invoked. Once the endblock() is evaluated, the recorded list of commands is invoked inside the requested scopes, then the scopes created by the block() command are removed.

SCOPE_FOR

Specify which scopes must be created.

POLICIES

Create a new policy scope. This is equivalent to cmake_policy(PUSH) with an automatic cmake_policy(POP) when leaving the block scope.

VARIABLES

Create a new variable scope.

If SCOPE_FOR is not specified, this is equivalent to:

block(SCOPE_FOR VARIABLES POLICIES)
PROPAGATE

When a variable scope is created by the block() command, this option sets or unsets the specified variables in the parent scope. This is equivalent to set(PARENT_SCOPE) or unset(PARENT_SCOPE) commands.

set(var1 "INIT1")
set(var2 "INIT2")

block(PROPAGATE var1 var2)
  set(var1 "VALUE1")
  unset(var2)
endblock()

# Now var1 holds VALUE1, and var2 is unset

This option is only allowed when a variable scope is created. An error will be raised in the other cases.

When the block() is inside a foreach() or while() command, the break() and continue() commands can be used inside the block.

while(TRUE)
  block()
     ...
     # the break() command will terminate the while() command
     break()
  endblock()
endwhile()

See Also