CMP0149

於版本 3.27 新增。

Visual Studio 產生器預設選擇最新的 Windows SDK。

Visual Studio 產生器選擇一個 Windows SDK 版本,放入 .vcxproj 檔案中的 WindowsTargetPlatformVersion 設定。 CMake 將 CMAKE_VS_WINDOWS_TARGET_PLATFORM_VERSION 變數設定為選定的 SDK 版本。

在 CMake 3.27 之前,SDK 版本總是透過 CMAKE_SYSTEM_VERSION 變數的值來選擇。使用者或工具鏈檔案可以將該變數設定為主機系統上可用的確切 Windows SDK 版本之一。由於 CMAKE_SYSTEM_VERSION 預設為 CMAKE_HOST_SYSTEM_VERSION,且不保證有可用的相符 Windows SDK 版本,因此如果沒有可用的確切相符版本,CMake 必須回退使用最新的 Windows SDK 版本。這種方法是有問題的

  • 是否選擇最新的 Windows SDK 可能取決於主機的 Windows 版本是否剛好與可用的 SDK 版本相符。

  • 可能會選取未針對較新的語言標準(例如 C11)更新的舊 Windows SDK 版本。

CMake 3.27 及更高版本傾向於忽略 CMAKE_SYSTEM_VERSION 的確切值,並預設選擇可用的最新 SDK 版本。可以使用 CMAKE_GENERATOR_PLATFORM 變數中的 version= 欄位明確指定確切的 SDK 版本。請參閱Visual Studio 平台選擇

此政策為尚未從使用 CMAKE_SYSTEM_VERSION 指定確切 SDK 版本移植的專案、工具鏈檔案和建置腳本提供相容性。

注意

此政策必須在專案頂部的第一個 project()enable_language() 命令調用之前設定。也就是說,當 Visual Studio 產生器 選擇 Windows SDK 時。

此政策的 OLD 行為是盡可能使用 CMAKE_SYSTEM_VERSION 的確切值。此政策的 NEW 行為是忽略它。

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

注意

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