使用make命令编译C++11代码触发编译器兼容错误如何解决
编译报错解决方案
报错本质是当前使用的GCC 4.8.2版本默认未开启C11标准支持,而代码引用了C11才提供的<array>标准库头文件,必须添加对应编译参数才能完成编译。make仅为编译流程调度工具,最终还是调用g++执行编译动作,可通过以下两种方案解决:
方案1:修改Makefile配置(永久生效)
找到Makefile中编译参数定义的段落,在CXXFLAGS变量后追加-std=c++11参数即可,修改后的代码段如下:
# Compilation flags ifeq ($(DEBUG),1) CXXFLAGS += -g -std=c++11 else CXXFLAGS += -O2 -std=c++11 endif
修改完成后先执行make clean清理历史编译缓存,再重新执行make命令即可正常编译。
方案2:执行make命令时临时传参(无需修改Makefile,单次生效)
如果不希望改动现有Makefile文件,可在执行make命令时直接传入带C++11参数的编译配置,命令如下:
# 编译Release版本 make CXXFLAGS="-O2 -std=c++11" # 编译Debug版本 make DEBUG=1 CXXFLAGS="-g -std=c++11"
执行编译前同样建议先运行make clean清理旧编译产物,避免缓存引发异常。
内容的提问来源于stack exchange,提问作者user16767585
相关产品推荐
相关产品推荐

