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 生成器将两个自定义命令的副本放入 Makefile 中,用于目标 second
,即使它对目标 first
的依赖性确保了第一个自定义命令早于第二个运行。运行 make second
会导致第一个自定义命令在 first
目标中运行一次,然后在 second
目标中再次运行。
CMake 3.19 及更高版本倾向于不重复目标中的自定义命令,而这些命令已经在目标所依赖(直接或间接)的其他目标中生成。本策略为尚未更新以期望新行为的项目提供兼容性。特别是,依赖重复执行或未正确设置 SYMBOLIC
源文件属性的项目可能会受到影响。
本策略的 OLD
行为是在依赖目标中重复自定义命令。本策略的 NEW
行为是不在依赖目标中重复自定义命令。
此策略在 CMake 3.19 版本中引入。可以通过 cmake_policy()
或 cmake_minimum_required()
设置。如果没有设置,CMake 会 不 警告,并使用 OLD
行为。
注意
策略的 OLD
行为默认情况下 已被 弃用
可能会在将来的 CMake 版本中删除。