为什么gcc编译器标志未知?

问题描述 投票:0回答:2

一直试图添加这个标志:-Wshadow=compatible-localdocumentation)编译时,它只是不断抛出这个消息:


`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解释了为什么下面)


有人知道为什么会这样吗?和/或如何修复它?

c++ c gcc compiler-errors compiler-flags
2个回答
2
投票

前段时间,GCC是MacOS上的默认编译器,然后Apple决定切换到clang作为默认值。假设他们将GCC与clang联系起来以避免人们想知道为什么编译器会消失(好吧,更合理:不要破坏任何构建系统......)。好主意?至少会导致混淆,因为不兼容性发挥作用......

“怎么修?”

在您的系统上安装一个真正的GCC,将符号链接替换为clang。

如果您喜欢继续使用clang(也不是一个糟糕的选择),请删除显然是GCC特定且不受clang支持的标志(您可以将其替换为clang的等效项,请参阅vpetrigoanswer)。

您甚至可以调整makefile以兼容两者:Get编译器的版本字符串,检查字符串是否返回contains“gcc”或“clang”,然后有条件地添加适当的编译器标志。


5
投票

似乎clang使用完全不同的旗帜命名:http://clang.llvm.org/docs/DiagnosticsReference.html#wshadow-uncaptured-local

它应该是-Wshadow-uncaptured-local而不是-Wshadow=compatible-local

© www.soinside.com 2019 - 2024. All rights reserved.