summaryrefslogtreecommitdiffstats
path: root/Help/command/if.rst
diff options
context:
space:
mode:
authorCraig Scott <craig.scott@crascit.com>2021-12-20 08:27:39 (GMT)
committerCraig Scott <craig.scott@crascit.com>2021-12-20 08:27:39 (GMT)
commita45e9227683f6832806c0d38d9ff9aadfa940e81 (patch)
treef74a8174949387580a3809a51fe9338a3935b867 /Help/command/if.rst
parent6b5c836252f897a79d7293a951ab79fd1755f16b (diff)
downloadCMake-a45e9227683f6832806c0d38d9ff9aadfa940e81.zip
CMake-a45e9227683f6832806c0d38d9ff9aadfa940e81.tar.gz
CMake-a45e9227683f6832806c0d38d9ff9aadfa940e81.tar.bz2
Help: Clarify behavior of if(DEFINED) for cache and non-cache variables
Fixes: #23023
Diffstat (limited to 'Help/command/if.rst')
-rw-r--r--Help/command/if.rst11
1 files changed, 10 insertions, 1 deletions
diff --git a/Help/command/if.rst b/Help/command/if.rst
index 5dba13e..6957142 100644
--- a/Help/command/if.rst
+++ b/Help/command/if.rst
@@ -126,7 +126,16 @@ Existence Checks
``if(DEFINED <name>|CACHE{<name>}|ENV{<name>})``
True if a variable, cache variable or environment variable
with given ``<name>`` is defined. The value of the variable
- does not matter. Note that macro arguments are not variables.
+ does not matter. Note the following caveats:
+
+ * Macro arguments are not variables.
+ * It is not possible to test directly whether a `<name>` is a non-cache
+ variable. The expression ``if(DEFINED someName)`` will evaluate to true
+ if either a cache or non-cache variable ``someName`` exists. In
+ comparison, the expression ``if(DEFINED CACHE{someName})`` will only
+ evaluate to true if a cache variable ``someName`` exists. Both expressions
+ need to be tested if you need to know whether a non-cache variable exists:
+ ``if(DEFINED someName AND NOT DEFINED CACHE{someName})``.
.. versionadded:: 3.14
Added support for ``CACHE{<name>}`` variables.