[英]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.