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 及更低版本中,即使目標 second 對目標 first 的依賴性確保了第一個自訂命令在第二個之前執行,Makefile 產生器仍會將兩個自訂命令的副本放在目標 second 的 Makefile 中。執行 make second 將導致第一個自訂命令在 first 目標中執行一次,然後在 second 目標中再次執行。

CMake 3.19 及以上版本傾向於不重複目標中已經在目標所依賴的其他目標(直接或間接)中產生的自訂命令。此策略為尚未更新以預期新行為的專案提供相容性。特別是,依賴重複執行或未正確設定 SYMBOLIC 原始檔屬性的專案可能會受到影響。

此策略的 OLD 行為是在相依目標中重複自訂命令。此策略的 NEW 行為是不在相依目標中重複自訂命令。

此策略在 CMake 版本 3.19 中引入。它可以由 cmake_policy()cmake_minimum_required() 設定。如果未設定,CMake 不會 警告,並使用 OLD 行為。

注意

策略的 OLD 行為依 定義已棄用,並可能在未來的 CMake 版本中移除。