特定のファイルを解析しないように言われる打ち鳴らすことはできますか?
質問
私は、私が働いているプロジェクトをプロファイルするために打ち鳴らすを使用しようとしています。このプロジェクトは、依存関係としてXcodeの中に含まれているかなり大きな静的ライブラリが含まれます。
打ち鳴らすを失敗させるように見えるとして私は本当に打ち鳴らすように、依存関係のファイルを解析しないようにでしょう。これは可能ですか?私は打ち鳴らすのマニュアルを読んでいる、と私はそれを見つけていない。
解決 2
ですから、これは本当に答えではないが、それは十分に働きました。
私は何をやってしまったことは、事前に静的ライブラリを構築した後、スキャン・ビルドを使用してプロジェクトを構築しました。すでに静的ライブラリの最新ビルドがあったので、それは再建されなかったため、スキャンされませんでした。
私はまだかかわらず、このための本当の答えを持っているのが大好きです。
他のヒント
最後の手段として、ブルートフォースオプションがあります。
ファイルの先頭にこれを追加します。
// Omit from static analysis.
#ifndef __clang_analyzer__
最後にこれを追加します。
#endif // not __clang_analyzer__
と打ち鳴らす--analyzeは、ファイルの内容は表示されません。
参照: / P>
私はXCodeのを使用していますが、私のためのLinuxで、次の作品をスキャンビルドを使用しないでください。 I私の場合、私は全ての第1党、非生成されたコードの静的解析を実行したいです。しかし、私はTHIRD_PARTYコードと生成されたコード上でそれを実行しないようにしたい。
アナライザの場所 - スキャン・ビルドは++ CCC-アナライザおよびCにCCとCXX環境変数を設定したときには、コマンドラインで、打ち鳴らす-アナライザは、ビルドにフックされます。私は++ ccc-analyzer.pyとCと呼ばれる2つの簡単なスクリプトを書いた - analyzer.pyを、デフォルトの代わりに、コンパイルにそれらを夢中。これらのラッパースクリプトでは、私は単純にコンパイルされているファイルのパスを見て、その後、(私が発生する静的解析を希望されている場合)を直接生のコンパイラ(私は静的解析を避けたい場合)またはcの*の-analyzerのいずれかを実行します。私のスクリプトはPythonであり、私の具体的なビルドシステムに結び付けられますが、修正が必要な例として:
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))