CMP0120

在 3.20 版本中新增。

WriteCompilerDetectionHeader 模組已移除。

CMake 3.1 到 3.19 版本提供了此模組,通過重複使用 CMake 的預處理器檢查表中的資訊,為 cmake-compile-features(7) 生成 C++ 相容層。然而,

  • 這些細化的功能已被用於 要求語言標準 的元功能(meta-features)所取代,例如 cxx_std_11。因此,不會新增新的細化功能檢查,專案將需要使用其他方法來有條件地使用新的 C++ 功能。

  • 該模組將 CMake 的一些實作細節直接暴露給 C++ 編譯單元。

  • 該模組的方法實際上提供了一個帶有 CMake 的標頭檔,因此將標頭的版本與 CMake 的版本綁定。許多專案發現,WriteCompilerDetectionHeader 最好通過使用最新版本的 CMake 手動在本機生成其標頭,然後將其與專案原始碼捆綁在一起,以便在較舊的 CMake 版本中使用。

由於包括上述原因在內,CMake 3.20 及以上版本選擇不提供 WriteCompilerDetectionHeader 模組。此政策為尚未從該模組移植的專案提供相容性。使用該模組的專案應更新為停止使用它。替代方案包括:

  • 將生成的標頭的副本捆綁在專案的原始碼中。

  • 使用第三方替代方案,例如 CC0 許可的 Hedley

  • 放棄支援過於老舊而無法原生提供這些功能的編譯器。

此政策的 OLD 行為是為了讓已棄用的 WriteCompilerDetectionHeader 模組能夠運作。 NEW 行為是使該模組的包含失敗,就像它不存在一樣。

此政策是在 CMake 3.20 版本中引入的。它可以使用 cmake_policy()cmake_minimum_required() 來設定。如果未設定,CMake 會發出警告,並使用 OLD 行為。

注意

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