| variable_watch |
| -------------- |
| |
| Watch the CMake variable for change. |
| |
| .. code-block:: cmake |
| |
| variable_watch(<variable> [<command>]) |
| |
| If the specified ``<variable>`` changes and no ``<command>`` is given, |
| a message will be printed to inform about the change. |
| |
| If ``<command>`` is given, this command will be executed instead. |
| The command will receive the following arguments: |
| ``COMMAND(<variable> <access> <value> <current_list_file> <stack>)`` |
| |
| ``<variable>`` |
| Name of the variable being accessed. |
| |
| ``<access>`` |
| One of ``READ_ACCESS``, ``UNKNOWN_READ_ACCESS``, ``MODIFIED_ACCESS``, |
| ``UNKNOWN_MODIFIED_ACCESS``, or ``REMOVED_ACCESS``. The ``UNKNOWN_`` |
| values are only used when the variable has never been set. Once set, |
| they are never used again during the same CMake run, even if the |
| variable is later unset. |
| |
| ``<value>`` |
| The value of the variable. On a modification, this is the new |
| (modified) value of the variable. On removal, the value is empty. |
| |
| ``<current_list_file>`` |
| Full path to the file doing the access. |
| |
| ``<stack>`` |
| List of absolute paths of all files currently on the stack of file |
| inclusion, with the bottom-most file first and the currently |
| processed file (that is, ``current_list_file``) last. |
| |
| Note that for some accesses such as :command:`list(APPEND)`, the watcher |
| is executed twice, first with a read access and then with a write one. |
| Also note that an :command:`if(DEFINED)` query on the variable does not |
| register as an access and the watcher is not executed. |
| |
| Only non-cache variables can be watched using this command. Access to |
| cache variables is never watched. However, the existence of a cache |
| variable ``var`` causes accesses to the non-cache variable ``var`` to |
| not use the ``UNKNOWN_`` prefix, even if a non-cache variable ``var`` |
| has never existed. |