| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- CMP0124
- -------
- .. versionadded:: 3.21
- :command:`foreach` loop variables are only available in the loop scope.
- CMake 3.20 and below always leave the loop variable set at the end of the
- loop, either to the value it had before the loop, if any, or to the empty
- string. CMake 3.21 and above prefer to leave the loop variable in the
- state it had before the loop started, either set or unset. This policy
- provides compatibility for projects that expect the loop variable to always
- be left set.
- The ``OLD`` behavior for this policy is to set the loop variable at the
- end of the loop, either to its original value, or to an empty value.
- The ``NEW`` behavior for this policy is to restore the loop variable to
- the state it had before the loop started, either set or unset.
- For example:
- .. code-block:: cmake
- set(items a b c)
- set(var1 "value")
- unset(var2)
- foreach(var1 IN LISTS items)
- endforeach()
- foreach(var2 IN LISTS items)
- endforeach()
- if(DEFINED var1)
- message("var1: ${var1}")
- endif()
- if(DEFINED var2)
- message("var2: ${var2}")
- endif()
- Under the ``OLD`` behavior, this code prints ``var1: value`` and ``var2:``.
- Under the ``NEW`` behavior, this code prints only ``var1: value``.
- .. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.21
- .. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn
- .. include:: STANDARD_ADVICE.txt
- .. include:: DEPRECATED.txt
|