# CMAKE_MSVC_RUNTIME_CHECKS

Added in version 4.0.

Select the list of enabled runtime checks when targeting the MSVC ABI. This variable is used to initialize the `MSVC_RUNTIME_CHECKS` property on all targets as they are created. It is also propagated by calls to the `try_compile()` command into the test project.

The allowed values are:

`PossibleDataLoss`

  Compile with `-RTCc` or equivalent flag(s) to enable possible data loss checks.

`StackFrameErrorCheck`

  Compile with `-RTCs` or equivalent flag(s) to enable stack frame error checks.

`UninitializedVariable`

  Compile with `-RTCu` or equivalent flag(s) to enable uninitialized variables checks.

The value is ignored on compilers not targeting the MSVC ABI, but an unsupported value will be rejected as an error when using a compiler targeting the MSVC ABI.

The value may also be the empty string (`""`), in which case no runtime error check flags will be added explicitly by CMake.

Use `generator expressions` to support per-configuration specification. For example, the code:

    set(CMAKE_MSVC_RUNTIME_CHECKS "$<$<CONFIG:Debug,RelWithDebInfo>:PossibleDataLoss;UninitializedVariable>")

enables for the target `foo` the possible data loss and uninitialized variables checks for the `Debug` and `RelWithDebInfo` configurations.

If this variable is not set, the `MSVC_RUNTIME_CHECKS` target property will not be set automatically. If that property is not set, CMake selects runtime checks using the default value `$<$<CONFIG:Debug>:StackFrameErrorCheck;UninitializedVariable>`, if supported by the compiler, or empty value otherwise.

Note

This variable has effect only when policy `CMP0184` is set to `NEW` prior to the first `project()` or `enable_language()` command that enables a language using a compiler targeting the MSVC ABI.