cmake-policies(7)

簡介

CMake 政策在保留現有專案版本的相容性的同時,引入行為變更。政策是棄用機制,而不是功能切換。每項政策都記錄了已棄用的 OLD 行為和首選的 NEW 行為。專案必須隨著時間推移進行更新以使用 NEW 行為,但其現有版本將繼續使用 OLD 行為。

更新專案

當 CMake 版本新引入政策時,該版本及更高版本會立即棄用其 OLD 行為。專案應盡快更新以使用政策的 NEW 行為。

使用 cmake_minimum_required() 命令來記錄專案已更新的最新 CMake 版本。例如

cmake_minimum_required(VERSION 3.10...3.31)

這使用 <min>...<max> 語法來啟用 CMake 3.31 及更早版本中引入的政策的 NEW 行為,同時僅需要最低 CMake 3.10 版本。專案預計可以使用這些版本之間引入的政策的 OLDNEW 行為。

轉換排程

為了幫助專案按照自己的排程移植到政策的 NEW 行為,CMake 提供了一個轉換期

  • 如果專案未設定政策,CMake 會使用其 OLD 行為,但可能會警告尚未設定政策。

    • 執行 CMake 的使用者可以透過在 cmake(1) 命令列上將 CMAKE_POLICY_DEFAULT_CMP<NNNN> 變數設定為快取條目來消除警告,而無需修改專案

      cmake -DCMAKE_POLICY_DEFAULT_CMP0990=OLD ...
      
    • 專案可以透過使用 cmake_policy() 命令將政策明確設定為 OLDNEW 行為來消除警告

      if(POLICY CMP0990)
        cmake_policy(SET CMP0990 NEW)
      endif()
      

      注意

      政策幾乎永遠不應設定為 OLD,除非是為了消除在其他方面已凍結或穩定的程式碼庫中的警告,或暫時作為較大遷移路徑的一部分。

  • 如果專案將政策設定為 OLD,則在引入政策的版本之後至少 2 年發布的 CMake 版本可能會發出警告,指出該政策的 OLD 行為將從未來版本的 CMake 中移除。

  • 如果專案未將政策設定為 NEW,則在引入政策的版本之後至少 6 年發布,且主要版本號較高的 CMake 版本可能會發出錯誤,指出該政策的 OLD 行為已移除。

支援的政策

以下政策受到支援。

CMake 4.0 導入的政策

CMake 3.31 導入的政策

CMake 3.30 導入的政策

CMake 3.29 導入的政策

CMake 3.28 導入的政策

CMake 3.27 導入的政策

CMake 3.26 導入的政策

CMake 3.25 導入的政策

CMake 3.24 導入的政策

CMake 3.23 導入的政策

CMake 3.22 導入的政策

CMake 3.21 導入的政策

CMake 3.20 導入的政策

CMake 3.19 導入的政策

CMake 3.18 導入的政策

CMake 3.17 導入的政策

CMake 3.16 導入的政策

CMake 3.15 導入的政策

CMake 3.14 導入的政策

CMake 3.13 導入的政策

CMake 3.12 導入的政策

CMake 3.11 導入的政策

CMake 3.10 導入的政策

CMake 3.9 導入的政策

CMake 3.8 導入的政策

CMake 3.7 導入的政策

不支援的政策

以下政策不再受到支援。專案對 cmake_minimum_required(VERSION)cmake_policy(VERSION) 的呼叫必須將它們設定為 NEW。它們的 OLD 行為已從 CMake 中移除。

CMake 3.4 導入的政策,CMake 4.0 移除

CMake 3.3 導入的政策,CMake 4.0 移除

CMake 3.2 導入的政策,CMake 4.0 移除

CMake 3.1 導入的政策,CMake 4.0 移除

CMake 3.0 導入的政策,CMake 4.0 移除

CMake 2.8 導入的政策,CMake 4.0 移除

CMake 2.6 導入的政策,CMake 4.0 移除