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 版本匹配。
可能會選擇舊的 Windows SDK 版本,該版本可能沒有針對較新的語言標準(如 C11)進行更新。
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 的未來版本中移除。