Frage

Ich versuche, Klirren zu verwenden, um ein Projekt zum Profil Ich arbeite an. Das Projekt umfasst eine ziemlich große statische Bibliothek, die in Xcode als Abhängigkeit enthalten ist.

Ich würde wirklich wie Klappern nicht die Abhängigkeiten Dateien zu analysieren, wie es Klirren scheitern zu machen scheint. Ist das möglich? Ich habe die Klirren Dokumentation gelesen, und ich habe es nicht gefunden.

War es hilfreich?

Lösung 2

Also, das ist nicht wirklich eine Antwort, aber es funktionierte gut genug.

dabei war der Bau die statische Bibliothek vor der Zeit

Was ich am Ende, und dann baut das Projekt mit Scan-build. Da es bereits war eine up-to-date-Erstellung der statischen Bibliothek, es wurde nicht wieder aufgebaut und so wurde nicht untersucht.

Ich würde immer noch gerne eine richtige Antwort für diese haben, though.

Andere Tipps

Als letztes gibt es eine Brute-Force-Option.

Fügen Sie diese an den Anfang einer Datei:

// Omit from static analysis.
#ifndef __clang_analyzer__

Fügen Sie diese bis zum Ende:

#endif // not __clang_analyzer__

und Klirren --analyze wird der Inhalt der Datei nicht sehen.

Referenz: Controlling Static Analyzer Diagnostics

Ich verwende XCode nicht, aber unter Verwendung von Scan-build in Linux die folgenden Werke für mich. Ich meinen Fall, ich mag die statische Analyse auf alle ersten Partei, nicht-generierten Code auszuführen. Allerdings möchte ich es auf third_party Code und erzeugt Code ausgeführt vermeiden.

in der Befehlszeile, Klappern-Analysator wird in die Build verhakt, wenn Scan-build setzt CC und CXX Umgebungsvariablen ccc-Analysator und C ++ - Analysator Standorte. Ich schrieb zwei einfache Skripte genannt ccc-analyzer.py und c ++ - analyzer.py und hakte sie anstelle der standardmäßig auf die Kompilierung in. In diesen Wrapper-Skripten, schaute ich einfach auf dem Pfad der Datei kompiliert wird und dann entweder den Roh-Compiler laufen direkt (wenn ich will statische Analyse vermeiden) oder c * -analyzer (wenn ich für die statische Analyse wollen auftreten). Mein Skript ist in Python und gebunden an meinem speziellen Build-System, sondern als Beispiel der Modifikation benötigt:

import subprocess
import sys

def main(argv):
  is_third_party_code = False
  for i in range(len(argv)):
    arg = argv[i]
    if arg == '-c':
      file_to_compile = argv[i + 1]
      if '/third_party/' in file_to_compile or \
            file_to_compile.startswith('gen/'):
        is_third_party_code = True
      break
  if is_third_party_code:
    argv[0] = '/samegoal/bin/clang++'
  else:
    argv[0] = '/samegoal/scan-build/c++-analyzer'
  return subprocess.call(argv)

if __name__ == '__main__':
  sys.exit(main(sys.argv))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top