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 中移除。