特定のファイルを解析しないように言われる打ち鳴らすことはできますか?

StackOverflow https://stackoverflow.com/questions/856895

  •  21-08-2019
  •  | 
  •  

質問

私は、私が働いているプロジェクトをプロファイルするために打ち鳴らすを使用しようとしています。このプロジェクトは、依存関係として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))
scroll top