簡體   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