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 行為是在執行自訂命令後轉換 DEPFILECMP0116 的狀態會在建立自訂命令時記錄,並且您可以在同一個目錄中具有不同 CMP0116 值的自訂命令,方法是在每個自訂命令之前設定政策。

此政策是在 CMake 版本 3.20 中引入的。它可以由 cmake_policy()cmake_minimum_required() 設定。如果未設定,CMake 預設情況下不會發出警告 (除非在子目錄中使用 DEPFILE),並且會使用 OLD 行為。

請參閱 CMAKE_POLICY_WARNING_CMP0116 變數的文件以控制警告。

注意

政策的 OLD 行為根據 定義已被棄用,並且可能會在 CMake 的未來版本中移除。