CMP0184

在版本 4.0 中新增。

MSVC 執行階段檢查旗標由抽象概念選取。

以 MSVC ABI 為目標的編譯器具有選擇執行階段檢查的旗標。執行階段檢查的選擇通常隨建置組態而異。

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

CMake 4.0 及更高版本傾向於將執行階段檢查旗標排除在預設的 CMAKE_<LANG>_FLAGS_<CONFIG> 值之外,而是提供第一級抽象概念。CMAKE_MSVC_RUNTIME_CHECKS 變數和 MSVC_RUNTIME_CHECKS 目標屬性可以設定為選擇 MSVC 執行階段檢查。如果它們未設定,CMake 會在使用預設值 $<$<CONFIG:Debug>:StackFrameErrorCheck;UninitializedVariable>Debug 組態中啟用執行階段檢查(如果編譯器支援),否則為空值。

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

注意

一旦政策在專案頂層生效,該選擇將在整個樹狀結構中使用。在子目錄中有巢狀專案的專案中,請務必確認所有內容都使用選定的政策行為運作。

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

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

注意

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