为什么 gcc 编译器标志未知?
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
。 (它说 clang
即使你输入 gcc
,因为我使用的是 macOS 并且很好......@Aconcagua 在下面解释了原因)
有人知道为什么会这样吗? and/or 如何解决?
似乎 clang
使用了完全不同的标志命名:http://clang.llvm.org/docs/DiagnosticsReference.html#wshadow-uncaptured-local
应该是-Wshadow-uncaptured-local
而不是-Wshadow=compatible-local
。
前段时间,GCC 是 MacOS 上的默认编译器,然后 Apple 决定改用 clang 作为默认编译器。假设他们将 GCC 链接到 clang 以避免人们想知道为什么编译器消失了(嗯,更合理:不破坏任何构建系统......)。好主意?至少在不兼容性发挥作用时会导致混乱...
"How to fix?"
在您的系统上安装真正的 GCC,将符号链接替换为 clang。
如果您更喜欢继续使用 clang(这也是一个不错的选择),请删除显然是 GCC 特定且不受 clang 支持的标志(您可以将其替换为 clang 的等效项,请参阅 vpetrigo's ) .
您甚至可以调整您的 makefile 以与两者兼容:Get the compiler's version string, check if the string returned contains "gcc" 或 "clang" 然后有条件地添加适当的编译器标志。
一直在尝试添加此标志:-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 在下面解释了原因)
有人知道为什么会这样吗? and/or 如何解决?
似乎 clang
使用了完全不同的标志命名:http://clang.llvm.org/docs/DiagnosticsReference.html#wshadow-uncaptured-local
应该是-Wshadow-uncaptured-local
而不是-Wshadow=compatible-local
。
前段时间,GCC 是 MacOS 上的默认编译器,然后 Apple 决定改用 clang 作为默认编译器。假设他们将 GCC 链接到 clang 以避免人们想知道为什么编译器消失了(嗯,更合理:不破坏任何构建系统......)。好主意?至少在不兼容性发挥作用时会导致混乱...
"How to fix?"
在您的系统上安装真正的 GCC,将符号链接替换为 clang。
如果您更喜欢继续使用 clang(这也是一个不错的选择),请删除显然是 GCC 特定且不受 clang 支持的标志(您可以将其替换为 clang 的等效项,请参阅 vpetrigo's
您甚至可以调整您的 makefile 以与两者兼容:Get the compiler's version string, check if the string returned contains "gcc" 或 "clang" 然后有条件地添加适当的编译器标志。