CMP0116

在 3.20 版本加入.

Ninja 生成器从 add_custom_command() 转换``DEPFILE``。

在 CMake 3.19 及以下版本中,提供给 add_custom_command 的 DEPFILE 参数的文件直接传递给 Ninja 的 depfile 变量,没有任何路径解析。这意味着如果从子目录(由 add_subdirectory 创建)调用 add_custom_command,则 DEPFILE 参数必须是绝对路径或相对于 :variable: 的路径CMAKE_BINARY_DIR`,而不是 CMAKE_CURRENT_BINARY_DIR。此外,没有对 DEPFILE 中列出的文件进行任何转换,这意味着 DEPFILE 中的路径具有相同的限制。

从 CMake 3.20 开始,DEPFILE 参数与 CMAKE_CURRENT_BINARY_DIR 相关(除非它是绝对的),DEPFILE 中的路径也与 CMAKE_CURRENT_BINARY_DIR 相关。运行自定义命令后,CMake 会自动转换 DEPFILE 中的路径(除非它们是绝对路径)。 DEPFILE 中列出的文件未以任何方式修改。相反,CMake 将转换写入其自己的内部文件,并将该内部文件传递给 Ninja 的“depfile”变量。无论``DEPFILE`` 是否是相对的,也不管是否从子目录调用 add_custom_command 都会发生这种转换。

此策略的“旧”行为是将“DEPFILE”原封不动地传递给 Ninja。此策略的“新”行为是在运行自定义命令后转换“DEPFILE”。 CMP0116 的状态在创建自定义命令时被记录下来,您可以通过在每个自定义命令之前设置策略,在同一目录中为 CMP0116 设置不同值的自定义命令。

此策略是在 CMake 版本 3.20 中引入的。与大多数政策不同,CMake 版本 |release|当此策略未设置时(除非在子目录中使用了``DEPFILE``)并且仅使用``OLD``行为,*不会*默认发出警告。请参阅 CMAKE_POLICY_WARNING_CMP0116 变量的文档以控制警告。