C_STANDARD

在 3.1 版本中添加。

构建此目标所需的 C 标准特性。

此属性指定了构建此目标所需的 C 标准特性。对于某些编译器,这会导致在编译行中添加一个标志,例如 -std=gnu11。对于没有 C 标准级别的编译器,例如 VS 16.7 之前的 Microsoft Visual C++,此属性无效。

支持的值有

90

C89/C90

99

C99

11

C11

17

在 3.21 版本中添加。

C17

23

在 3.21 版本中添加。

C23

如果请求的值不会为所用编译器添加编译标志,则会添加之前的标准标志。这意味着使用

set_property(TARGET tgt PROPERTY C_STANDARD 11)

对于不支持 -std=gnu11 或等效标志的编译器将不会导致错误或警告,但如果支持,它会添加 -std=gnu99-std=gnu90 标志。此“衰减”行为可以用 C_STANDARD_REQUIRED 目标属性进行控制。此外,C_EXTENSIONS 目标属性可用于控制是否基于每个目标启用编译器特定的扩展。

有关编译特性和受支持编译器列表的信息,请参阅 cmake-compile-features(7) 手册。

如果在创建目标时设置了 CMAKE_C_STANDARD 变量的值,则此属性将由此变量的值初始化。