mirror of
https://github.com/Kitware/CMake.git
synced 2026-04-23 14:48:19 -05:00
Help: Clarify policy CMP0077 documentation
Add background about the case in which the policy is relevant. Describe the OLD and NEW behaviors more completely. Fixes: #18418
This commit is contained in:
+40
-4
@@ -3,10 +3,46 @@ CMP0077
|
||||
|
||||
:command:`option` honors normal variables.
|
||||
|
||||
The ``OLD`` behavior for this policy is to clear any existing normal variables
|
||||
with the same name. The ``NEW`` behavior for this policy is to not create
|
||||
a cache entry or modify any existing normal variables if a normal variable
|
||||
with the same name already exists.
|
||||
The :command:`option` command is typically used to create a cache entry
|
||||
to allow users to set the option. However, there are cases in which a
|
||||
normal (non-cached) variable of the same name as the option may be
|
||||
defined by the project prior to calling the :command:`option` command.
|
||||
For example, a project that embeds another project as a subdirectory
|
||||
may want to hard-code options of the subproject to build the way it needs.
|
||||
|
||||
For historical reasons in CMake 3.12 and below the :command:`option`
|
||||
command *removes* a normal (non-cached) variable of the same name when:
|
||||
|
||||
* a cache entry of the specified name does not exist at all, or
|
||||
* a cache entry of the specified name exists but has not been given
|
||||
a type (e.g. via ``-D<name>=ON`` on the command line).
|
||||
|
||||
In both of these cases (typically on the first run in a new build tree),
|
||||
the :command:`option` command gives the cache entry type ``BOOL`` and
|
||||
removes any normal (non-cached) variable of the same name. In the
|
||||
remaining case that the cache entry of the specified name already
|
||||
exists and has a type (typically on later runs in a build tree), the
|
||||
:command:`option` command changes nothing and any normal variable of
|
||||
the same name remains set.
|
||||
|
||||
In CMake 3.13 and above the :command:`option` command prefers to
|
||||
do nothing when a normal variable of the given name already exists.
|
||||
It does not create or update a cache entry or remove the normal variable.
|
||||
The new behavior is consistent between the first and later runs in a
|
||||
build tree. This policy provides compatibility with projects that have
|
||||
not been updated to expect the new behavior.
|
||||
|
||||
When the :command:`option` command sees a normal variable of the given
|
||||
name:
|
||||
|
||||
* The ``OLD`` behavior for this policy is to proceed even when a normal
|
||||
variable of the same name exists. If the cache entry does not already
|
||||
exist and have a type then it is created and/or given a type and the
|
||||
normal variable is removed.
|
||||
|
||||
* The ``NEW`` behavior for this policy is to do nothing when a normal
|
||||
variable of the same name exists. The normal variable is not removed.
|
||||
The cache entry is not created or updated and is ignored if it exists.
|
||||
|
||||
This policy was introduced in CMake version 3.13. CMake version
|
||||
|release| warns when the policy is not set and uses ``OLD`` behavior.
|
||||
|
||||
@@ -203,8 +203,10 @@ Deprecated and Removed Features
|
||||
Other Changes
|
||||
=============
|
||||
|
||||
* The :command:`option` command now honors existing normal variables instead
|
||||
of replacing them with a cache entry. See policy :policy:`CMP0077`.
|
||||
* The :command:`option` command now honors an existing normal variable
|
||||
of the same name and does nothing instead of possibly creating a cache
|
||||
entry (or setting its type) and removing the normal variable.
|
||||
See policy :policy:`CMP0077`.
|
||||
|
||||
* The :ref:`Makefile Generators` learned to remove custom command and
|
||||
custom target byproducts during ``make clean``.
|
||||
|
||||
Reference in New Issue
Block a user