| CMP0180 |
| ------- |
| |
| .. versionadded:: 3.31 |
| |
| :command:`project` always sets ``<PROJECT-NAME>_*`` as normal variables. |
| |
| In CMake 3.29 and below, the :command:`project` command set |
| :variable:`<PROJECT-NAME>_SOURCE_DIR`, :variable:`<PROJECT-NAME>_BINARY_DIR`, |
| and :variable:`<PROJECT-NAME>_IS_TOP_LEVEL` as cache entries, but not as |
| normal variables. CMake 3.30 started setting them as normal variables, |
| but only if they are already set as normal variables. This was needed to |
| preserve support for some :module:`FetchContent` use cases under policy |
| :policy:`CMP0169`'s NEW behavior, while also preserving behavior of nested |
| directories that call :command:`project` with the same project name. |
| See release notes for 3.30.3, 3.30.4, and 3.30.5 for details. |
| |
| CMake 3.31 and later prefer to always set ``<PROJECT-NAME>_SOURCE_DIR``, |
| ``<PROJECT-NAME>_BINARY_DIR``, and ``<PROJECT-NAME>_IS_TOP_LEVEL``, as both |
| cache entries and normal variables, regardless of what cache or normal |
| variables already exist. This policy provides compatibility for projects |
| that have not been updated to expect this behavior. |
| |
| The ``OLD`` behavior for this policy will only set normal variables for |
| ``<PROJECT-NAME>_SOURCE_DIR``, ``<PROJECT-NAME>_BINARY_DIR``, and |
| ``<PROJECT-NAME>_IS_TOP_LEVEL`` if there is already a normal variable by that |
| name when :command:`project` is called. |
| The ``NEW`` behavior for this policy will always set normal variables for |
| ``<PROJECT-NAME>_SOURCE_DIR``, ``<PROJECT-NAME>_BINARY_DIR``, and |
| ``<PROJECT-NAME>_IS_TOP_LEVEL`` when :command:`project` is called. |
| |
| .. |INTRODUCED_IN_CMAKE_VERSION| replace:: 3.31 |
| .. |WARNS_OR_DOES_NOT_WARN| replace:: does *not* warn |
| .. include:: include/STANDARD_ADVICE.rst |
| |
| .. include:: include/DEPRECATED.rst |