CMP0116¶
在版本 3.20 中新增。
Ninja 產生器會轉換來自 add_custom_command()
的 DEPFILE
。
在 CMake 3.19 及更早的版本中,傳遞給 add_custom_command()
的 DEPFILE
參數的檔案會直接傳遞給 Ninja 的 depfile
變數,而不會進行任何路徑解析。這表示如果 add_custom_command()
是從子目錄(由 add_subdirectory()
建立)呼叫,則 DEPFILE
參數必須是絕對路徑或相對於 CMAKE_BINARY_DIR
的路徑,而不是 CMAKE_CURRENT_BINARY_DIR
。此外,不會對 DEPFILE
中列出的檔案進行任何轉換,這表示 DEPFILE
內的路徑具有相同的限制。
從 CMake 3.20 開始,DEPFILE
參數是相對於 CMAKE_CURRENT_BINARY_DIR
(除非它是絕對路徑),並且 DEPFILE
中的路徑也相對於 CMAKE_CURRENT_BINARY_DIR
。在自訂命令執行後,CMake 會自動轉換 DEPFILE
中的路徑 (除非它們是絕對路徑)。DEPFILE
中列出的檔案不會以任何方式修改。相反地,CMake 會將轉換寫入自己的內部檔案,並將此內部檔案傳遞給 Ninja 的 depfile
變數。無論 DEPFILE
是否為相對路徑,以及無論是否從子目錄呼叫 add_custom_command()
,都會發生此轉換。
此政策的 OLD
行為是將 DEPFILE
未經修改地傳遞給 Ninja。此政策的 NEW
行為是在執行自訂命令後轉換 DEPFILE
。CMP0116
的狀態會在建立自訂命令時記錄,並且您可以在同一個目錄中具有不同 CMP0116
值的自訂命令,方法是在每個自訂命令之前設定政策。
此政策是在 CMake 版本 3.20 中引入的。它可以由 cmake_policy()
或 cmake_minimum_required()
設定。如果未設定,CMake 預設情況下不會發出警告 (除非在子目錄中使用 DEPFILE
),並且會使用 OLD
行為。
請參閱 CMAKE_POLICY_WARNING_CMP0116
變數的文件以控制警告。
注意
政策的 OLD
行為根據 定義已被棄用
,並且可能會在 CMake 的未來版本中移除。