CMP0116

在 3.20 版本中添加。

Ninja 生成器转换 DEPFILE 文件自 add_custom_command()

在 CMake 3.19 及更早版本中,传递给 add_custom_command()DEPFILE 参数的文件直接传递给 Ninja 的 depfile 变量,没有进行任何路径解析。这意味着如果 add_custom_command() 是从子目录(由 add_subdirectory() 创建)调用,则 DEPFILE 参数必须是绝对路径或相对于 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() 是否从子目录调用,都会发生。

此策略的 OLD 行为是将 DEPFILE 不加修改地传递给 Ninja。此策略的 NEW 行为是在运行自定义命令后转换 DEPFILECMP0116 的状态在自定义命令创建时记录,您可以通过在每个自定义命令之前设置策略,在同一目录中为 CMP0116 设置不同的值。

此策略在 CMake 3.20 版本中引入。它可以通过 cmake_policy()cmake_minimum_required() 设置。如果未设置,CMake 默认情况下不发出警告(除非 DEPFILE 在子目录中使用),并使用 OLD 行为。

请参阅 CMAKE_POLICY_WARNING_CMP0116 变量的文档以控制警告。

注意

策略的 OLD 行为是 已废弃 定义,可能会在 CMake 的未来版本中移除。