2009-06-04 101 views
5

我很好奇,如果有一個選項可以禁用有關參數對編譯語言無效的gcc警告。爲不兼容的選項禁用gcc警告

例:

cc1: warning: command line option "-Wno-deprecated" is valid for C++/Java/ObjC++ but not for C 

我們的構建系統通過我們在全球範圍橫跨構建決定了警告。 我們有C/C++代碼和警告,當試圖找到實際的警告時會變得非常煩人。

有什麼建議嗎?

+0

恕我直言,這是最好的解決在Make水平。你知道哪些源文件是C和哪些是C++,對嗎? – 2009-06-05 06:37:05

回答

2

在我看來,如果有這樣一個選項,就必須有一個進一步的選項來關閉關於該選項的警告,等等無限。所以我懷疑沒有。

擁有完全不同語言版本的相同選項似乎有點奇怪 - 我將有不同的選項定義爲makefile宏,並適用於不同的目標。

+0

我意識到外人看起來很奇怪。我不負責構建系統,我只是想清理它。我並沒有真正有能力分開這兩個人。 – 2009-06-04 23:26:21

0

唉gcc沒有能力打開或關閉個別警告。有些警告是特殊的,可以設置警告級別,但無法關閉您不關心的警告。

我的意思是誰會在乎文件末尾缺少空行?我知道有一個補丁可以關閉它,但是從源代碼構建我的編譯器有點太過分了。

對於您的構建系統,您可能需要爲不同的語言定義單獨的警告集。如果您需要使用其他編譯器而不是gcc,會發生什麼?

+0

我們的構建系統不支持多個編譯器,實際上3。跨越6種不同的架構。 GCC編譯舊的C代碼是邊緣的情況下,和 - >爲什麼我問的問題.. – 2009-06-04 23:28:09

3

要啓用特定的警告在GCC -Wxxxx-Wno-XXXX禁用它們。

GCC Warning Options

可以開頭的選項請求-W', for example -Wimplicit to request warnings on implicit declarations. Each of these specific warning options also has a negative form beginning -Wno-」來關閉警告許多特定的警告;例如,-Wno-implicit。本手冊僅列出兩種形式中的一種,無論哪種都不是默認值。

然而,@尼爾關於分離不同語言的選項是正確的。如果你使用make你可以例如將所有C選項放入CFLAGS中,並將所有C++選項放入CCFLAGS中。

+0

警告選項生成的警告,我不認爲-Wno *的適用於這種情況。 – 2009-06-04 23:30:16

0

如果以C++編譯C文件是您的一個選項,-x c++

+0

這是一個非常糟糕的主意,他們將在的libstdC+++帶來鏈接這是* *巨大 – ismail 2009-06-05 06:45:08

2

如果設置CFLAGS變量它只會影響C文件,如果設置CXXFLAGS變量它只會影響C++文件,所以可以容易地分離的邏輯。

+0

這取決於他的makefile – 2009-06-05 06:58:03