CMP0091

在版本 3.15 中新增。

MSVC 執行階段函式庫旗標由抽象概念選取。

以 MSVC ABI 為目標的編譯器具有旗標可選取 MSVC 執行階段函式庫。執行階段函式庫的選取通常會隨著建置組態而異,因為 Debug 建置有獨立的執行階段函式庫。

在 CMake 3.14 及更早版本中,MSVC 執行階段函式庫選取旗標會自動新增到預設的 CMAKE_<LANG>_FLAGS_<CONFIG> 快取條目中。這允許使用者編輯他們的快取條目來調整旗標。然而,對於想要以程式化方式選擇不同執行階段函式庫的專案來說,這些預設旗標的存在是有問題的。特別是,這需要字串編輯 CMAKE_<LANG>_FLAGS_<CONFIG> 變數,並了解 CMake 內建的預設值,以便它們可以被取代。

CMake 3.15 及更高版本傾向於將 MSVC 執行階段函式庫選取旗標從預設的 CMAKE_<LANG>_FLAGS_<CONFIG> 值中移除,而是提供第一級抽象概念。CMAKE_MSVC_RUNTIME_LIBRARY 變數和 MSVC_RUNTIME_LIBRARY 目標屬性可用於選取 MSVC 執行階段函式庫。如果它們未設定,則 CMake 會使用預設值 MultiThreaded$<$<CONFIG:Debug>:Debug>DLL,這等同於原始旗標。

此政策提供與尚未更新以了解抽象概念的專案的相容性。政策設定在啟用以 MSVC ABI 為目標的編譯器的語言的第一個 project()enable_language() 命令生效。

注意

一旦政策在專案頂層生效,則必須在整個樹狀結構中使用該選擇。在子目錄中有巢狀專案的專案中,請務必一起轉換所有內容。

此政策的 OLD 行為是將 MSVC 執行階段函式庫旗標放置在預設的 CMAKE_<LANG>_FLAGS_<CONFIG> 快取條目中,並忽略 CMAKE_MSVC_RUNTIME_LIBRARY 抽象概念。此政策的 NEW 行為是將 MSVC 執行階段函式庫旗標放置在預設快取條目中,而是改用抽象概念。

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

注意

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