CMP0116¶
在版本 3.20 中新增。
Ninja 產生器轉換來自 DEPFILE
的 add_custom_command()
。
在 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 中移除。