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 源文件属性的项目可能会受到影响。
此策略的“旧”行为是在相关目标中复制自定义命令。此策略的“新”行为是不在依赖目标中复制自定义命令。
此策略是在 CMake 版本 3.19 中引入的。与许多政策不同,CMake 版本 |release|当此策略未设置且仅使用“旧”行为时*不*发出警告。
备注
策略的“旧”行为是 :manual:根据定义 <cmake-policies(7)> 已弃用,并且可能会在未来版本的 CMake 中删除。