Ignorieren Sie alle Warnungen in einer bestimmten Datei mit LLVM / Clang

69

Es gibt einige Dateien in meinem iOS-Projekt, die einige Warnungen enthalten, und ich möchte diese Warnungen ignorieren. Ich möchte keine Warnungen im gesamten Projekt deaktivieren (weiß, wie das geht), sondern nur einige bestimmte Dateien. Gibt es eine Möglichkeit, alle Warnungen aus einer bestimmten Datei vollständig zu ignorieren?

Ich verwende LLVM 3.0 und Clang auf Xcode 4.2.

Bobbypage
quelle
Sind sie IHRE Quellen oder jemand anderes in Ihrem Projekt? Wenn sie jemand anderem gehören, besteht der beste Ansatz darin, sie in eine statische Bibliothek zu stellen und sie zu verknüpfen.
Steven Fisher
Die hier gegebene Antwort ist sehr elegant: stackoverflow.com/questions/6921884/…
Oded Ben Dov

Antworten:

64

Wenn Sie nur clang verwenden, sollten Sie die Pragma-Syntax für die von Ihnen verwalteten Quellen verwenden (vorausgesetzt, es ist unmöglich, die Warnung durch entsprechende Änderung des Programms zu entfernen).

Hier ist die Syntax:

#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"

char b = 'df'; // no warning.

#pragma clang diagnostic pop

Wenn es sich um Programme handelt, die Sie nicht ändern und nicht warten können, sollten Sie die Warnung (en) angeben, die für die Datei deaktiviert werden sollen, und nicht alle. Um alle zu deaktivieren, können Sie das Argument pro Datei hinzufügen -w. Quellen ändern sich und einige Warnungen gelten (oder gelten nicht) mit unterschiedlichen Build-Einstellungen. Die Nachrichten von clang können Ihnen sagen, welches Flag der generierten Warnung entspricht.

So ändern Sie mit Xcode die Build-Flags einer Datei:

  • Wählen Sie das Ziel aus
  • Wählen Sie die Erstellungsphase aus
  • Suchen Sie die Datei, um die Argumente in der Phase "Quellen kompilieren" zu ändern
  • Doppelklicken Sie zum Bearbeiten auf die Zelle "Compiler Flags"
Justin
quelle
95

Ich habe ein Projekt geerbt, das viel 320 Code enthielt, und diese Codebasis warf mehrere Warnungen und statische Analysefehler auf mich, die ich nicht beheben wollte, da ich diesen Code in naher Zukunft aus dem Projekt entfernen werde.

Sie können die Warnungen des statischen Analysators für eine bestimmte Datei deaktivieren, indem Sie das folgende Compiler-Flag einfügen:

-Xanalyzer -analyzer-disable-all-checks

Sie können dies mit -w kombinieren, um Warnungen auch für diese Datei zu deaktivieren. Dadurch konnte ich die Neuentwicklung vorantreiben, ohne mit den etwa 30 Warnungen belästigt werden zu müssen, die von dieser Codebasis generiert wurden.

Verwenden Sie die Anweisungen von oben: So ändern Sie mit Xcode die Build-Flags einer Datei:

  1. Wählen Sie das Ziel aus
  2. Wählen Sie die Erstellungsphase aus
  3. Suchen Sie die Datei, um die Argumente in der Phase "Quellen kompilieren" zu ändern
  4. Doppelklicken Sie zum Bearbeiten auf die Zelle "Compiler Flags"
  5. Fügen Sie "-w -Xanalyzer -analyzer-disable-all-tests" hinzu, um Warnungen zu unterdrücken und Warnungen zu klingeln
kcharwood
quelle
Fantastisch. Vielen Dank für das Compiler-Flag, genau das, was ich brauchte.
Mike A
4
Neuere Versionen von clang (dh 4.x in iOS6) scheinen diese Option -Xclang -analyzer-disable-checker
orj
3
Das -Xanalyzer-Formular funktioniert weiterhin in meinem neu installierten XCode (Version 4.5.1, IOS6). Die andere Form funktioniert nicht.
fishinear
1
Das funktioniert in XCode 4.5.2 zu deaktivieren 'Den rechten Operanden von '+' ist ein Müll Wert' in 3rd-Party - Quelle (RegexKitLite.m) ( Fehlerbericht ). Die akzeptierte Antwort tat es nicht. Es wäre hilfreich , diese Antwort mit dem Unterschied zwischen zu aktualisieren , was -Xanalyzer, -wund -analyzer-disable-checkerzu tun.
Jeffro
21

Mit Hilfe von Justins Antwort machen Sie das so

1. Suchen Sie den Namen der Warnung.

In meinem Fall ist es conversion

Geben Sie hier die Bildbeschreibung ein

2. Fügen Sie eine Erstellungsphase für das Compiler-Flag pro Datei hinzu

Verwenden Sie den Filter, um den Namen der Datei in Kompilierungsquellen zu finden. Geben Sie -Wno-[error name]z-Wno-conversion

Geben Sie hier die Bildbeschreibung ein

Robert
quelle
Halleluja! Ich habe hoch und niedrig danach gesucht. Die Syntax der Option -W scheint nirgendwo dokumentiert zu sein!
mluisbrown
3

Sie können ein bestimmtes Ziel auswählen -> Einstellungen erstellen, nach Alle Warnungen sperren suchen und auf JA setzen. Dadurch werden Warnungen auf diesem Ziel deaktiviert. Dies kann nützlich sein, wenn Sie Code wie JSONKit mit Cocoapods verwenden und nicht sehen möchten, wie der Compiler über Warnungen weint :)

dormitkon
quelle