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
行为是在运行自定义命令后转换 DEPFILE
。CMP0116
的状态在自定义命令创建时记录,并且通过在每个自定义命令之前设置策略,您可以在同一目录中拥有 CMP0116
具有不同值的自定义命令。
此策略在 CMake 版本 3.20 中引入。它可以通过 cmake_policy()
或 cmake_minimum_required()
设置。如果未设置,CMake 默认情况下不发出警告(除非在子目录中使用 DEPFILE
),并使用 OLD
行为。
请参阅 CMAKE_POLICY_WARNING_CMP0116
变量的文档以控制警告。
注意
策略的 OLD
行为按定义已弃用
,并可能在 CMake 的未来版本中删除。