设置 C 标准标志启用 GNU 扩展

Posted

技术标签:

【中文标题】设置 C 标准标志启用 GNU 扩展【英文标题】:Setting the C standard flag enables GNU extensions 【发布时间】:2018-02-01 21:58:43 【问题描述】:

如果我这样做:

 set_property(TARGET tgt PROPERTY C_STANDARD 99)

CMakeLists.txt 和C 编译器是gcc 中,我得到-std=gnu99 标志而不是-std=c99。为什么?以及如何执行-std=c99

【问题讨论】:

【参考方案1】:

有C_EXTENSIONS目标属性,指定是否请求编译器特定的扩展:

此属性指定是否应使用编译器特定的扩展。对于某些编译器,这会导致在编译行中添加一个标志,例如 -std=gnu11 而不是 -std=c11。此属性默认为ON。基本 C 标准级别由C_STANDARD 目标属性控制。

您可以将此属性设置为OFF 以获得“纯”C 标准。

【讨论】:

以上是关于设置 C 标准标志启用 GNU 扩展的主要内容,如果未能解决你的问题,请参考以下文章

如果设置了标志,GNU 如何理解?

使用 GNU make 编译启用配置文件的包

cmake如何在C ++中将编译器标志附加到末尾

警告:扩展初始化列表仅适用于 -std=c++11 或 -std=gnu++11 [默认启用]

链接使用不同预处理器标志或 C 标准构建的库

GNU C编译器的gnu11和c11