CMP0091¶
加入於版本 3.15。
MSVC 執行時期程式庫旗標由一個抽象概念選取。
針對 MSVC ABI 的編譯器具有選取 MSVC 執行時期程式庫的旗標。執行時期程式庫的選取通常會隨著建置組態而變化,因為除錯 (Debug) 建置有不同的執行時期程式庫。
在 CMake 3.14 及更早版本中,MSVC 執行時期程式庫選取旗標會自動由 CMake 加入到預設的 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 版本中移除。