CMP0120

在版本 3.20 中新增。

WriteCompilerDetectionHeader 模組已被移除。

CMake 版本 3.1 至 3.19 提供此模組,透過重複使用 CMake 的前處理器檢查表中的資訊,為 cmake-compile-features(7) 建立 C++ 相容性層。然而

  • 這些細化的功能已被 要求語言標準 (例如 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 中移除。