2012-04-06 20 views
2

In gcc -w werden alle Warnungen deaktiviert. In diesem Fall kann ich jedoch keine spezifischen aktivieren (z. B. -Wreturn-Typ).Alle bis auf wenige Warnungen in gcc deaktivieren

Ist es möglich, alle Warnungen zu deaktivieren, aber einige spezifische zu aktivieren?

Als Workaround gibt es eine Möglichkeit, Liste aller -Wno-xxx auf einmal zu generieren? Und wird es helfen? Ich möchte das nicht manuell machen, nur um herauszufinden, dass es nicht gleich -w ist.

+1

Das ist seltsam. Normalerweise sollten Sie ** alle Warnungen aktivieren und bestimmte deaktivieren ... – Mat

+0

Ja, Sie haben Recht, Sie wissen es besser! Aber stellen wir uns vor, ich habe ein Legacy-Projekt mit 4 Millionen Codezeilen, in denen ich bestimmte Fehler finden möchte. – queen3

+0

Nun, wenn Sie nur '-Wreturn-Typ' angeben (keine anderen Warn-Flags), macht das nicht was Sie wollen? – Mat

Antwort

1

können Sie den folgenden Befehl verwenden, um eine WARN_OPTS Variable geeignet für die Injektion in direkt zu bekommen Makefile:

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

Diese Sie Ausgang (in makefile.inject) wie gibt:

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 \ 

Sobald das gesetzt ist in Ihrem tatsächlichen Makefile, verwenden Sie einfach $(WARN_OPTS) als Teil Ihrer gcc Befehl.

Es kann eine kleine Menge Touch benötigt bis zu:

  • ungültiger Optionen wie -Wno- loszuwerden;
  • bestimmte bestimmte -Wno-<key>=<value> Arten reparieren; und
  • entfernen Sie die endgültige \ Zeichen.

aber das ist minimaler Aufwand im Vergleich zur Erstellung der langen Liste, etwas, was Sie jetzt einfach tun können.

Wenn Sie feststellen, dass Sie eine dieser Warnungen möchten, wechseln Sie einfach von -Wno-<something> zurück zu -W<something>.

Verwandte Themen