CMP0116¶
3.20 版本中添加。
Ninja 生成器变换 DEPFILE
为 add_custom_command()
。
在 CMake 3.19 及更低版本中,提供给 DEPFILE
参数的 add_custom_command()
文件直接传递给 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
行为 by definition
已过时,可能会在未来版本的 CMake 中被移除。