繁体   English   中英

为什么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 (即使您键入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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM