CMP0116

在版本 3.20 中新增。

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

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

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

注意

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