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 变量的值在创建目标时进行初始化(如果该变量已设置)。