Ubuntu系统下g++编译报错‘-fno-diagnostics-color’,求编译器配置位置
我之前也碰到过一模一样的问题,大概率是你的g++版本偏老——-fno-diagnostics-color这个参数是GCC 4.9及以后版本才支持的,老版本不认这个选项。下面给你梳理几个最可能的配置来源,帮你找到并移除这个参数:
检查环境变量
很多时候这类编译参数会被放在CXXFLAGS或CPPFLAGS环境变量里。先在终端执行这两个命令看看:echo $CXXFLAGS echo $CPPFLAGS如果输出里包含
-fno-diagnostics-color,就去修改对应的配置文件:- 个人用户配置:
~/.bashrc、~/.profile或者~/.bash_profile - 系统级配置:
/etc/bash.bashrc、/etc/profile
找到定义这些变量的行,删掉-fno-diagnostics-color,然后执行source ~/.bashrc(对应你修改的文件)让配置生效。
- 个人用户配置:
检查Makefile或构建脚本
如果你是用Make编译程序,打开项目里的Makefile,找找有没有直接在g++命令里加这个选项,或者定义了CXXFLAGS包含它。找到后直接删除该参数即可。如果是其他构建工具(比如CMake),可以检查CMakeLists.txt里的add_compile_options或者set(CMAKE_CXX_FLAGS ...)配置。检查IDE/编辑器的编译配置
如果你用IDE或编辑器编译:- VS Code:查看
.vscode/tasks.json里的编译命令,或者.vscode/c_cpp_properties.json中的编译参数; - CLion:进入
Settings -> Build, Execution, Deployment -> Compiler,检查C++编译器的附加选项;
找到包含-fno-diagnostics-color的地方删掉就行。
- VS Code:查看
检查系统级编译器配置
GCC有个specs文件用来定义默认编译参数,你可以先执行下面的命令检查:gcc -dumpspecs | grep -i color如果输出里有相关配置,对应的文件路径一般是
/etc/gcc/<你的gcc版本>/specs(比如/etc/gcc/4.8/specs)。修改这个文件前记得备份,然后找到包含该参数的行删除即可。不过这个操作要谨慎,影响系统所有用户的编译配置。检查是否有包装脚本/别名
有时候可能是某个别名或者第三方包装脚本给g加了这个参数。你可以先执行which g++看看实际调用的路径,如果不是/usr/bin/g++,那可能是个脚本,打开这个脚本检查有没有加-fno-diagnostics-color。或者直接用绝对路径调用g试试:/usr/bin/g++ yourfile.cpp如果这样不报错,说明是别名或脚本的问题,修改对应的别名定义(一般在
~/.bashrc里)或者脚本即可。
如果还是找不到,可以用g++ -v yourfile.cpp查看完整的编译命令行,输出里会列出所有传递给编译器的参数,能帮你更精准定位这个选项的来源。
内容的提问来源于stack exchange,提问作者Gizmapps

