一直试图添加这个标志:-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
。 (它说clang
,即使你输入gcc
,因为我正在使用macOS并且很好...... @Aconcagua解释了为什么下面)
有人知道为什么会这样吗?和/或如何修复它?
前段时间,GCC是MacOS上的默认编译器,然后Apple决定切换到clang作为默认值。假设他们将GCC与clang联系起来以避免人们想知道为什么编译器会消失(好吧,更合理:不要破坏任何构建系统......)。好主意?至少会导致混淆,因为不兼容性发挥作用......
“怎么修?”
在您的系统上安装一个真正的GCC,将符号链接替换为clang。
如果您喜欢继续使用clang(也不是一个糟糕的选择),请删除显然是GCC特定且不受clang支持的标志(您可以将其替换为clang的等效项,请参阅vpetrigo的answer)。
您甚至可以调整makefile以兼容两者:Get编译器的版本字符串,检查字符串是否返回contains“gcc”或“clang”,然后有条件地添加适当的编译器标志。
似乎clang
使用完全不同的旗帜命名:http://clang.llvm.org/docs/DiagnosticsReference.html#wshadow-uncaptured-local
它应该是-Wshadow-uncaptured-local
而不是-Wshadow=compatible-local
。