如何在Qt Creator中禁用C++11/14,以C++98/03标准编译项目?
如何在Qt Creator中强制使用C++98/03标准编译项目
你遇到的问题核心在于Qt 5.9(以及Qt 5.7及以上版本)默认会自动启用C11支持,哪怕你手动添加了CONFIG -= c++11,qmake仍可能在后续处理流程中注入-std=gnu++11编译选项,导致你设置的-std=c++98被后面的选项覆盖。下面是彻底关闭C11/14支持的完整解决方案:
步骤1:完全禁用CONFIG中的C++11/14相关选项
在你的.pro文件开头(或至少在其他配置之前),明确移除所有与C++11/14/17相关的CONFIG标记,并启用对应的禁用选项:
# 移除默认启用的C++11/14/17配置 CONFIG -= c++11 c++14 c++1z # 明确禁用C++11/14/17标准支持 CONFIG += no-c++11 no-c++14 no-c++1z
这一步会直接告诉qmake,不要自动生成任何C++11及以上版本的编译参数。
步骤2:强制设置C++98编译标准
接下来,添加C98的编译参数,同时确保清理掉可能残留的GNU扩展C标准选项:
# 移除可能存在的GNU扩展C++标准选项 QMAKE_CXXFLAGS -= -std=gnu++11 -std=gnu++14 # 添加C++98标准及严格语法检查 QMAKE_CXXFLAGS += -std=c++98 -pedantic
如果上述移除操作不生效,你还可以直接使用Qt提供的QMAKE_CXXFLAGS_STD变量来强制覆盖标准设置:
QMAKE_CXXFLAGS_STD = -std=c++98
步骤3:验证配置是否生效
为了确认配置正确,你可以在.pro文件中添加调试输出,查看当前的CONFIG和编译选项:
# 输出当前CONFIG和编译选项,用于调试验证 message("当前CONFIG配置: " $$CONFIG) message("当前编译选项: " $$QMAKE_CXXFLAGS)
保存文件后,在Qt Creator中点击"qmake"按钮,然后查看编译输出中的g++命令,确认只有-std=c++98而没有-std=gnu++11。
额外注意事项
- Qt 5.9的部分模块(如Qt Quick 2.x)依赖C11特性,如果你的项目使用了这些模块,强制使用C98可能会导致编译错误,请确保项目仅使用兼容C++98的Qt API。
- 如果你引入了第三方库,也要确认这些库是用C++98标准编译的,避免出现链接错误。
内容的提问来源于stack exchange,提问作者Konstantin T.




