[英]Why is gcc compiler flag unknown?
在尝试添加此标志时: -Wshadow=compatible-local
( documentation ) ,但它只是不断抛出此消息:
`error: unknown warning option '-Wshadow=compatible-local';
did you mean '-Wshadow- uncaptured-local'?
[-Werror,-Wunknown-warning-option]`
我的makefile片段:
# COMPILER & FLAGS ============================================================
CC = gcc
CFLAGS = -g -std=c11 -O3 \
-Wall -Wextra -Werror \
-Wshadow -Wshadow=compatible-local \
-Wno-sign-compare \
-fsanitize=integer \
-fsanitize=undefined \
-fsanitize=address -fsanitize-address-use-after-scope
更新:
注意:我的编译器版本是clang-900.0.39.2
。 (即使您键入gcc
,它也会显示clang
,因为我使用的是macOS,而且... @Aconcagua在下面解释了原因)
有人知道为什么会这样吗? 和/或如何解决?
似乎clang
使用了完全不同的标志命名: http : //clang.llvm.org/docs/DiagnosticsReference.html#wshadow-uncaptured-local
它应该是-Wshadow-uncaptured-local
而不是-Wshadow=compatible-local
。
前一段时间,GCC是MacOS上的默认编译器,然后Apple决定切换到clang作为默认编译器。 假设他们将GCC链接到clang,以避免人们怀疑编译器为何消失(嗯,更合理:不破坏任何构建系统...)。 好主意? 至少在不兼容发挥作用的情况下导致混乱...
“怎么修?”
在系统上安装真正的GCC,将符号链接替换为clang。
如果您更喜欢使用clang(也不是一个错误的选择),则删除显然是GCC特定的并且不受clang支持的标志(您可以将其替换为clang的等效项,请参见vpetrigo的答案 )。
您甚至可以调整makefile使其与两者兼容: 获取编译器的版本字符串,检查返回的字符串是否包含 “ gcc”或“ clang”,然后有条件地添加适当的编译器标志。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.