2012-12-06 17 views
13

Ich habe hinzugefügt, alles zu meiner $PATH und ich habe meine SConstruct gezwickt die entsprechenden Umgebungsvariablen zu setzen, wie pro diese Antworten [1, 2, 3]. Nun, wenn ichMit Clang der Scan-Aufbau mit scons und C++ 11

scan-build --use-c++=`which clang++` scons 

die Build laufen beginnt, und ich kann das Verfahren durch scons ist

/path/to/c++-analyzer ... -std=c++11 ... 

Die Objektdatei erfolgreich erstellt, aber dann bekomme ich einen Fehler gegabelt sehen:

could not find clang line 

Dieser Fehler tritt in c++-analyzer auf, wenn der gegabelte Prozess die Zeichenfolge -cc1 nicht enthält. Aber wenn ich ps aux überprüfen, ich sehe deutlich

/path/to/clang -cc1 ... 

Wie kann das Programm baut richtig, aber der statische Analysator nicht so?


Für Referenz, wenn ich manuell ausführen

scan-build clang++ <parameters from scons> 

dann wird die Build erfolgreich und der Bericht erstellt!

Ich kann auch "betrügen" durch Zugabe von

env["ENV"]["PATH"] = os.environ["PATH"] 

und dann

CXX="scan-build clang++" scons 

läuft Ich kann einfach nicht laufen scan-build auf scons selbst mit einem unmodifizierten SConstruct.

+0

Ihre Frage wird in der ersten verknüpften Antwort beantwortet: "SCons reinigt normalerweise die Umgebung, bevor ein Build ausgeführt wird (dies ist eine Funktion)." –

+0

@ Industrial-Antidepressivum Ich verwende bereits die Umgebungsvariablen, die Greg vorschlägt. Ich kann * via Clang und SCons einfach aufbauen *; Ich kann den * statischen Analysator * nicht ausführen. – chrisaycock

+0

Hmm, versuch es mit scan-build --use-analyzer =/path/to/clang –

Antwort

4

Das Problem ist, dass Clang nicht auf dem Suchpfad in der execution environment ist. Dies erklärt, warum das Hinzufügen der Zeile env["ENV"]["PATH"] = os.environ["PATH"] das Problem löst.

Um scan-build auf einer unmodifizierten SConstruct führen Sie das Klirren ausführbare Datei (clang++ und möglicherweise clang) auf dem Suchpfad von der Ausführungsumgebung verwendet setzen können, beispielsweise Erstellen Sie einen symbolischen Link von /usr/bin/clang++ zu Ihrem /path/to/clang++ unter Linux.