variable_watch

监听 CMake 变量的更改。

variable_watch(<variable> [<command>])

如果指定的 <variable> 更改,并且没有给出 <command>,将会打印一条消息来告知更改。

如果给出了 <command>,将会执行此命令。命令会收到以下参数:COMMAND(<variable> <access> <value> <current_list_file> <stack>)

<variable>

正在访问的变量的名称。

<access>

READ_ACCESSUNKNOWN_READ_ACCESSMODIFIED_ACCESSUNKNOWN_MODIFIED_ACCESSREMOVED_ACCESS 之一。 UNKNOWN_ 值仅在从未设置变量时使用。一旦设置,它们在同一 CMake 运行期间将永远不再使用,即使变量在之后取消设置也是如此。

<value>

变量的值。在修改时,这是变量的新(修改后的)值。在删除时,该值为为空。

<current_list_file>

正在进行访问的文件的完整路径。

<stack>

当前文件包含栈中所有文件的绝对路径列表,最底层的文件位于最前面,当前正在处理的文件(即 current_list_file)位于最后面。

请注意,对于 list(APPEND) 等某些访问,侦听器会执行两次,第一次为读取访问,第二次为写入访问。还要注意,变量上的 if(DEFINED) 查询不会注册为访问,并且不会执行侦听器。

只能使用此命令监视非缓存变量。缓存变量的访问永远不会受到监控。但是,缓存变量 var 的存在会导致对非缓存变量 var 的访问不使用 UNKNOWN_ 前缀,即使非缓存变量 var 从未存在过也是如此。