2012-04-06 67 views
2

gcc -w用於禁用所有警告。但是在這種情況下,我不能啓用特定的(例如-Wreturn-type)。在gcc中禁用幾乎所有警告

是否可以禁用所有警告,但啓用幾個特定的​​警告?

作爲一種解決方法,是否有辦法一次生成所有-Wno-xxx列表?它會幫助嗎?我不想手動做這個,只是爲了發現它不等於-w。

+1

這很奇怪。你通常應**啓用**所有警告並禁用特定的... – Mat 2012-04-06 09:42:47

+0

是的,你是對的,你知道的更好!但讓我們想象一下,我有一個遺留項目,其中有4 ml代碼行,我想找到具體的錯誤。 – queen3 2012-04-06 09:44:48

+0

那麼,如果你只是指定'-Wreturn-type'(沒有其他警告相關的標誌),不是你想要的嗎? – Mat 2012-04-06 09:47:29

回答

1

您可以使用下面的命令來查看WARN_OPTS變量適合直接注射到你的Makefile

gcc --help=warnings | awk ' 
    BEGIN  { print "WARN_OPTS = \\" } 
    /-W[^ ]/ { print $1" \\"} 
' | sed 's/^-W/ -Wno-/' >makefile.inject 

這給你輸出(在makefile.inject),如:

WARN_OPTS = \ 
    -Wno- \ 
    -Wno-abi \ 
    -Wno-address \ 
    -Wno-aggregate-return \ 
    -Wno-aliasing \ 
    -Wno-align-commons \ 
    -Wno-all \ 
    -Wno-ampersand \ 
    -Wno-array-bounds \ 
    -Wno-array-temporaries \ 
    : : : 
    -Wno-variadic-macros \ 
    -Wno-vector-operation-performance \ 
    -Wno-vla \ 
    -Wno-volatile-register-var \ 
    -Wno-write-strings \ 
    -Wno-zero-as-null-pointer-constant \ 

一旦我們把在您的實際Makefile中,只需使用$(WARN_OPTS)作爲您的gcc命令的一部分。

它可能需要觸摸少量高達:

  • 擺脫無效的選項,如-Wno-;
  • 修復某些-Wno-<key>=<value>類型;和
  • 刪除最後的\字符。

但與長列表的生成相比,這是最小的努力,你現在可以做的很簡單。

當您確定需要其中某個警告時,只需從-Wno-<something>切換回-W<something>即可。