CMAKE_MSVC_RUNTIME_CHECKS

4.0 版本新增。

当针对 MSVC ABI 进行编译时,选择启用的运行时检查列表。此变量用于在所有目标创建时初始化 MSVC_RUNTIME_CHECKS 属性。它也会被 try_compile() 命令传递给测试项目。

允许的值为

PossibleDataLoss

使用 -RTCc 或等效标志编译以启用潜在数据丢失检查。

StackFrameErrorCheck

使用 -RTCs 或等效标志编译以启用堆栈帧错误检查。

UninitializedVariable

使用 -RTCu 或等效标志编译以启用未初始化变量检查。

对于不以 MSVC ABI 为目标编译器的编译器,此值将被忽略,但当使用以 MSVC ABI 为目标编译器的编译器时,不受支持的值将被视为错误。

该值也可以是空字符串 (""),在这种情况下,CMake 不会显式添加运行时错误检查标志。

使用 生成器表达式 来支持按配置指定。例如,以下代码

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

为目标 fooDebugRelWithDebInfo 配置中启用潜在数据丢失和未初始化变量检查。

如果此变量未设置,则 MSVC_RUNTIME_CHECKS 目标属性不会自动设置。如果该属性未设置,CMake 会使用默认值 $<$<CONFIG:Debug>:StackFrameErrorCheck;UninitializedVariable>(如果编译器支持)或空值来选择运行时检查,否则为空值。

注意

此变量仅在策略 CMP0184 设置为 NEW,并且在该策略设置之前调用了第一个启用使用面向 MSVC ABI 的编译器来启用语言的 project()enable_language() 命令时才有效。