variable_watch¶
监听 CMake 变量的更改。
variable_watch(<variable> [<command>])
如果指定的 <variable>
更改,并且没有给出 <command>
,将会打印一条消息来告知更改。
如果给出了 <command>
,将会执行此命令。命令会收到以下参数:COMMAND(<variable> <access> <value> <current_list_file> <stack>)
<variable>
正在访问的变量的名称。
<access>
READ_ACCESS
、UNKNOWN_READ_ACCESS
、MODIFIED_ACCESS
、UNKNOWN_MODIFIED_ACCESS
或REMOVED_ACCESS
之一。UNKNOWN_
值仅在从未设置变量时使用。一旦设置,它们在同一 CMake 运行期间将永远不再使用,即使变量在之后取消设置也是如此。<value>
变量的值。在修改时,这是变量的新(修改后的)值。在删除时,该值为为空。
<current_list_file>
正在进行访问的文件的完整路径。
<stack>
当前文件包含栈中所有文件的绝对路径列表,最底层的文件位于最前面,当前正在处理的文件(即
current_list_file
)位于最后面。
请注意,对于 list(APPEND)
等某些访问,侦听器会执行两次,第一次为读取访问,第二次为写入访问。还要注意,变量上的 if(DEFINED)
查询不会注册为访问,并且不会执行侦听器。
只能使用此命令监视非缓存变量。缓存变量的访问永远不会受到监控。但是,缓存变量 var
的存在会导致对非缓存变量 var
的访问不使用 UNKNOWN_
前缀,即使非缓存变量 var
从未存在过也是如此。