作業中のプロジェクトのプロファイルを作成するためにclangを使用しようとしています。プロジェクトには、依存関係としてXcodeに含まれているかなり大きな静的ライブラリが含まれています。
clangが失敗するように見えるので、clangに依存関係のファイルを分析しないようにしたいと思います。これは可能ですか?clangのドキュメントを読んでいますが、見つかりませんでした。
最後の手段として、ブルートフォースオプションがあります。
これをファイルの先頭に追加します。
// Omit from static analysis.
#ifndef __clang_analyzer__
これを最後に追加します。
#endif // not __clang_analyzer__
そしてclang--analyzeはファイルの内容を見ません。
したがって、これは実際には答えではありませんが、十分に機能しました。
私がやったことは、事前に静的ライブラリをビルドしてから、scan-buildを使用してプロジェクトをビルドすることでした。静的ライブラリの最新のビルドがすでに存在していたため、再ビルドされず、スキャンされませんでした。
しかし、私はまだこれに対する本当の答えが欲しいです。
私は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))