CMP0113¶
在版本 3.19 中添加。
Makefile 生成器 不会重复来自目标依赖项的自定义命令。
考虑跨两个依赖目标拆分的自定义命令链
add_custom_command(OUTPUT output-not-created
COMMAND ... DEPENDS ...)
set_property(SOURCE output-not-created PROPERTY SYMBOLIC 1)
add_custom_command(OUTPUT output-created
COMMAND ... DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/output-not-created)
add_custom_target(first DEPENDS output-not-created)
add_custom_target(second DEPENDS output-created)
add_dependencies(second first)
在 CMake 3.18 及更低版本中,Makefile 生成器在目标 second
的 Makefile 中放置了两个自定义命令的副本,即使它对目标 first
的依赖关系确保了第一个自定义命令在第二个命令之前运行。运行 make second
将导致第一个自定义命令在 first
目标中运行一次,然后在 second
目标中再次运行。
CMake 3.19 及更高版本倾向于不复制目标中已经在其依赖的其他目标(直接或间接)中生成的自定义命令。此策略为尚未更新以预期新行为的项目提供兼容性。特别是,依赖于重复执行或未正确设置 SYMBOLIC
源文件属性的项目可能会受到影响。
此策略的 OLD
行为是在依赖目标中复制自定义命令。NEW
行为是不在依赖目标中复制自定义命令。
此策略在 CMake 版本 3.19 中引入。它可以通过 cmake_policy()
或 cmake_minimum_required()
设置。如果未设置,CMake 不会发出警告,并使用 OLD
行为。
注意
策略的 OLD
行为根据定义已弃用
,并可能在 CMake 的未来版本中删除。