나는 일하고있는 프로젝트를 프로파일 링하기 위해 clang을 사용하려고합니다. 이 프로젝트에는 종속성으로 Xcode에 포함 된 다소 큰 정적 라이브러리가 포함되어 있습니다.특정 파일을 분석하지 않도록 할 수 있습니까?
clang이 실패하게 만드는 것처럼 나는 의존성 파일을 분석하지 않기를 정말로 원합니다. 이것이 가능한가? 나는 clang 문서를 읽었으며 발견하지 못했습니다.
나는 일하고있는 프로젝트를 프로파일 링하기 위해 clang을 사용하려고합니다. 이 프로젝트에는 종속성으로 Xcode에 포함 된 다소 큰 정적 라이브러리가 포함되어 있습니다.특정 파일을 분석하지 않도록 할 수 있습니까?
clang이 실패하게 만드는 것처럼 나는 의존성 파일을 분석하지 않기를 정말로 원합니다. 이것이 가능한가? 나는 clang 문서를 읽었으며 발견하지 못했습니다.
그래서 이것은 실제로 대답이 아니지만 충분히 잘 작동합니다.
나는 결국 정적 라이브러리를 빌드 한 다음 스캔 빌드를 사용하여 프로젝트를 빌드했습니다. 이미 정적 라이브러리의 최신 빌드가 있었기 때문에 다시 빌드되지 않았으므로 스캔되지 않았습니다.
그래도 나는이 사실에 대한 진정한 대답을 원합니다.
최후의 수단으로 무차별 옵션이 있습니다.
// Omit from static analysis.
#ifndef __clang_analyzer__
가 끝이 추가 :
#endif // not __clang_analyzer__
을하고 그 소리 --Analyze는 파일의 내용을 볼 수 없습니다
는 파일의 시작 부분이 추가.이것은 정적 라이브러리의 모든 소스 파일에이 매크로를 설정해야 함을 의미합니다. 그렇지 않습니까? 그것은 관리 할 수없는 IMO가 아닙니다. iOS 프로젝트에 CocoaPod를 사용하고 있기 때문에 의존성을 전혀 수정하지 않을 것입니다. –
내가 엑스 코드를 사용하지만, 나를 위해 리눅스에 다음 작품을 스캔 빌드를 사용하지 않습니다. 필자는 제 1 자의 비 생성 코드에 대해 정적 분석을 실행하려고합니다. 그러나 third_party 코드 및 생성 된 코드에서이를 실행하지 않도록하고 싶습니다.
scan-build가 ccc-analyzer 및 C++ - analyzer 위치로 CC 및 CXX 환경 변수를 설정할 때 명령 줄에서 clang-analyzer가 빌드에 연결됩니다. 나는 ccc-analyzer.py와 C++ - analyzer.py라는 두 개의 간단한 스크립트를 작성하여 기본값 대신 컴파일에 연결했다. 이러한 래퍼 스크립트에서 컴파일 된 파일의 경로를 살펴본 다음 원시 컴파일러를 직접 (정적 분석을 피하려는 경우) 또는 c * -analyzer (정적 분석을 수행하려는 경우) 중 하나를 실행합니다. 내 스크립트는 파이썬에 내 특정 빌드 시스템에 묶여 있지만, 수정이 필요 예를 들어 :
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))
애플이 http://devforums.apple.com에서 NDA에서 출시 된 제품의 기밀 토론 괜찮은 포럼이 이 같은 질문에 애플 민간 및 기타 공개 된 개발자가 대답 할 수 있습니다. – cdespinosa
(실제로 공개 된 http://clang.llvm.org/StaticAnalysis.html에서 scan-build 도구를 사용하지 않는 한, 분석 할 소스 파일을 나열하십시오. 그 페이지의 기본 사용법에서) – cdespinosa
나는 scan-build 도구에 대해서 이야기하고있다. 불행히도 기본적인 사용법에서는 분석에서 파일을 제외하는 것에 대해 아무 것도 없습니다. 프로젝트에서 스캔 빌드를 사용하는 경우 기본적으로 대규모 정적 라이브러리를 포함하여 해당 프로젝트 내의 모든 파일을 분석합니다. –