You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让CMake使用gnu17 C标准而非ISO C17标准?

解决CMake设置GNU C17标准报错的问题

问题原因

CMake的C_STANDARD属性仅支持指定纯C语言标准版本号(如99、11、17),不接受带gnu前缀的扩展标准,因此直接设置gnu17会触发"invalid value"错误。

解决方案

方法1:通过CMake标准属性启用GNU扩展

先指定C标准版本,再开启C扩展支持,CMake会自动为GCC生成std=gnu17编译选项:

# 针对单个目标设置
set_property(TARGET "${MyProject_${Compile_Type}_NAME}" PROPERTY C_STANDARD 17)
set_property(TARGET "${MyProject_${Compile_Type}_NAME}" PROPERTY C_STANDARD_REQUIRED ON)
set_property(TARGET "${MyProject_${Compile_Type}_NAME}" PROPERTY C_EXTENSIONS ON)

# 或者全局设置(作用于所有后续创建的目标)
set(CMAKE_C_STANDARD 17)
set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_C_EXTENSIONS ON)

注:C_EXTENSIONS默认值为ON,若之前被手动关闭过,需显式开启。

方法2:直接添加编译选项

如果旧版本CMake不支持上述属性组合,可直接手动传递-std=gnu17给编译器:

target_compile_options("${MyProject_${Compile_Type}_NAME}" PRIVATE -std=gnu17)

这种方式可直接控制编译参数,确保GCC使用GNU C17扩展标准,同时保留-pedantic警告级别对非扩展语法的检查。

内容的提问来源于stack exchange,提问作者Piotr Lopusiewicz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:15:40