23

作業中のプロジェクトのプロファイルを作成するためにclangを使用しようとしています。プロジェクトには、依存関係としてXcodeに含まれているかなり大きな静的ライブラリが含まれています。

clangが失敗するように見えるので、clangに依存関係のファイルを分析しないようにしたいと思います。これは可能ですか?clangのドキュメントを読んでいますが、見つかりませんでした。

4

4 に答える 4

15

最後の手段として、ブルートフォースオプションがあります。

これをファイルの先頭に追加します。

// Omit from static analysis.
#ifndef __clang_analyzer__

これを最後に追加します。

#endif // not __clang_analyzer__

そしてclang--analyzeはファイルの内容を見ません。

参照:静的アナライザー診断の制御

于 2011-03-10T20:32:41.630 に答える
6

したがって、これは実際には答えではありませんが、十分に機能しました。

私がやったことは、事前に静的ライブラリをビルドしてから、scan-buildを使用してプロジェクトをビルドすることでした。静的ライブラリの最新のビルドがすでに存在していたため、再ビルドされず、スキャンされませんでした。

しかし、私はまだこれに対する本当の答えが欲しいです。

于 2009-05-22T23:55:53.810 に答える
6

最後に、2018年にオプションが実装されました。

--exclude <path> [1] [2]オプションを使用する

-除外する

このディレクトリにあるファイルに対して静的アナライザを実行しないでください(このオプションは複数回指定できます)。プロジェクトにサードパーティのライブラリが含まれている場合に役立ちます。

于 2020-04-02T05:31:39.997 に答える
3

私はXCodeを使用していませんが、Linuxでscan-buildを使用すると、次のように機能します。私の場合、すべてのファーストパーティの生成されていないコードで静的分析を実行したいと思います。ただし、サードパーティのコードと生成されたコードで実行することは避けたいと思います。

コマンドラインで、scan-buildがCCおよびCXX環境変数をccc-analyzerおよびc ++-analyzerの場所に設定すると、clang-analyzerがビルドにフックされます。ccc-analyzer.pyとc++-analyzer.pyという2つの簡単なスクリプトを作成し、デフォルトの代わりにコンパイルにフックしました。これらのラッパースクリプトでは、コンパイルされるファイルのパスを確認し、rawコンパイラーを直接(静的分析を回避したい場合)または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))
于 2013-01-07T21:52:47.403 に答える